C++
zsuzsamber
这个作者很懒,什么都没留下…
展开
-
leetcode hash+前缀
560因为以i结尾的连续子数组,只需要找到是否存在i结尾的前缀的presum-K的hash值存在即可,即可找到将和为presum-k的前缀去掉即可。class Solution {public: int subarraySum(vector<int>& nums, int k) { unordered_map<int,int>map; map[0]=1; int pre = 0; int coun原创 2020-09-02 00:16:17 · 152 阅读 · 0 评论 -
leetcode滑动窗口
一般使用双坐标实现,l和r,循环控制l和r范围209class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int l=0; int r=0; int sum = 0; int n = nums.size(); int res = INT_MAX; while(r<n){ //控制右边位原创 2020-08-30 22:44:44 · 105 阅读 · 0 评论 -
2020-08-16
leetcode中的单调栈栈内的元素大小按照他所在的位置满足单调递减84解析:栈中保存的是位置,并且按位置排列,元素单调递减每次迭代的res表示以h为高的最大面积,因为除了l到r的范围,再也没有比高度为h的更大的面积了,l-1处的h(l-1)是小于h(l)的,而h(r+1)<h®的。而这样遍历一遍即可找到注意,这里对heights加元素0是为了保证所有元素都能弹出(比如只有一个元素的情况)class Solution {public: int largestRectangleAr原创 2020-08-16 21:46:34 · 69 阅读 · 0 评论 -
leetcode中的分析法
621. 任务调度器给定一个用字符数组表示的 CPU 需要执行的任务列表。其中包含使用大写的 A - Z 字母表示的26 种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。CPU 在任何一个单位时间内都可以执行一个任务,或者在待命状态。然而,两个相同种类的任务之间必须有长度为 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的最短时间。分析:maxBuketNum 任务种类的数量ma原创 2020-07-11 17:31:20 · 114 阅读 · 0 评论 -
leetcode中的位置指针
利用两个指针来标记开始和结束,经常在字符串中用到640. 求解方程求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含’+’,’ - '操作,变量 x 和其对应系数。如果方程没有解,请返回“No solution”。如果方程有无限解,则返回“Infinite solutions”。如果方程中只有一个解,要保证返回值 x 是一个整数。解析:i表示数字开始位置,j表示数字结束位置class Solution {public: string solveEquatio原创 2020-07-09 23:06:15 · 130 阅读 · 0 评论 -
LeetCode中的DFS
BFS深度优先遍历算法,一般使用递归实现,注意递归结束条件464. 我能赢吗在 “100 game” 这个游戏中,两名玩家轮流选择从 1 到 10 的任意整数,累计整数和,先使得累计整数和达到 100 的玩家,即为胜者。如果我们将游戏规则改为 “玩家不能重复使用整数” 呢?例如,两个玩家可以轮流从公共整数池中抽取从 1 到 15 的整数(不放回),直到累计整数和 >= 100。给定一个整数 maxChoosableInteger (整数池中可选择的最大数)和另一个整数 desiredTot原创 2020-07-08 22:54:10 · 169 阅读 · 0 评论 -
LeetCode中BFS(广度优先搜索)
1、广度优先搜索就是先搜索广度如下所示,广度优先算法会优先遍历每一层a/ \b c/ \d e利用队列可实现广度优先遍历127. 单词接龙给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复原创 2020-07-06 17:54:22 · 306 阅读 · 0 评论 -
leetcode中的bitmap
C++中常用的bitmap数据结构bitset相关函数set() count() any() none()1239. 串联字符串的最大长度给定一个字符串数组 arr,字符串 s 是将 arr 某一子序列字符串连接所得的字符串,如果 s 中的每一个字符都只出现过一次,那么它就是一个可行解。请返回所有可行解 s 中最长长度。1、要是子序列中有重复的字符,则不合法,跳过该子序列2、子字符串要是和之前的合法的字符串无重复字符,则加到总序列中,并更新最大合法序列长度。class Solution原创 2020-07-06 17:05:46 · 230 阅读 · 0 评论 -
leetcode递归/栈
标题递归或者栈都能解决一类问题递归较为关键的地方是结束条件字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。class Soluti原创 2020-07-05 22:24:12 · 106 阅读 · 0 评论 -
leetcode中的动态规划
动态规划利用上一步迭代的结果作为下一步迭代的条件进行运算,dp[i]由dp[i-1]得到1186. 删除一次得到子数组最大和描述:给你一个整数数组,返回它的某个 非空 子数组(连续元素)在执行一次可选的删除操作后,所能得到的最大元素总和。换句话说,你可以从原数组中选出一个子数组,并可以决定要不要从中删除一个元素(只能删一次哦),(删除后)子数组中至少应当有一个元素,然后该子数组(剩下)的元素总和是所有子数组之中最大的。注意,删除一个元素后,子数组 不能为空。子数组需要是连续的,所以对于当前的元素原创 2020-07-05 20:58:29 · 173 阅读 · 0 评论 -
leetcode中的二分法
二分法:初始化范围min,max中间位置tmp=min+(max-min)/2,分为前半部分还是后半部分根据条件确定是前半部分还是后半部分主要边界条件需要一一对应1、1011,在D天内送包裹题示:传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。思路:D天内找到货船的最低原创 2020-07-03 13:14:02 · 219 阅读 · 0 评论