LeetCode2606:找到最大开销的子字符串

题目描述: 方法1:动态规划,题目类似于最大子数组和,本题中p表示以nums[i]结尾的最大开销的子数组,val哈希表存储每个字母的开销 m是最大开销的子数组 class Solution { public: int maximumCostSubstring(string s, string


LeetCode1248:统计优美子数组

题目描述:给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字,我们就认为这个子数组是「优美子数组」。请返回这个数组中 「优美子数组」 的数目。 方法1:哈希表,i次循环处理每一个数,用一个数记录第i个数与第i个数之前奇数数字个数,用一个哈希表存储第i个数之前所有可


LeetCode1:两数之和

题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 方法1:哈希表,key为nums[i],value为i,一边遍历一边


LeetCode556:和为k的子数组

题目描述:给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。子数组是数组中元素的连续非空序列。 方法1:前缀和+哈希表,i次循环处理每一个数,用一个数记录第i个数的前缀和,用一个哈希表存储第i个数之前所有数的不同前缀和以及其出现的次数,只要(第i个数的


LeetCode2320:统计放置房子的方式数

题目描述:一条街道上共有 n * 2 个地块 ,街道的两侧各有 n 个地块。每一边的地块都按从 1 到 n 编号。每个地块上都可以放置一所房子。现要求街道同一侧不能存在两所房子相邻的情况,请你计算并返回放置房屋的方式数目。由于答案可能很大,需要对 109 + 7 取余后再返回。 方法1:动态规划dp


LeetCode213:打家劫舍Ⅱ

题目描述:你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警 。 方法1:动态规划,第一圈和最后一圈不能同时偷,


LeetCode34:在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。 方法1:二分查找 返回数组中第一个大于等于target的位置,Solution类中的tar方法 注:传统的二分查


LeetCode300:最长递增子序列

题目描述:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 方法1:动态规划,下面的代码写成了求最长连续递增子序列(dp数组设为了以i结尾的最长连续递增子序列),错误 class Solution { public: int lengthOfLIS(vector<int>&


LeetCode155:最小栈

题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆