![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
LeetCode刷题题解
qq789045
这个作者很懒,什么都没留下…
展开
-
394. 字符串解码
https://leetcode-cn.com/problems/decode-string/1.全局小标2.两种模式3.']'处理。如果一个新开的decode的第一个字符是],说明不属于这一层的,直接返回。class Solution {public: int i; string s; int get_digit(int i,int j,string s){ int sum=0; for(int k=i;k<=j;k+原创 2021-08-31 23:20:13 · 167 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/submissions/原地遍历的话,首先需要计算最终的长度。然后从后到前遍历。class Solution {public: string replaceSpace(string s) { int cnt=0; for(int i=0;i<s.size();i++){ if(s[i]==' ')原创 2020-12-29 00:03:16 · 131 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
https://leetcode-cn.com/problems/er-wei-shu-zu-zhong-de-cha-zhao-lcof/选择右上角的,就能每次都排除一行或者一列class Solution {public: bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int n=matrix.size(); if(n==0)原创 2020-12-28 23:53:14 · 95 阅读 · 1 评论 -
剑指 Offer 40. 最小的k个数
https://leetcode-cn.com/problems/zui-xiao-de-kge-shu-lcof/submissions/class Solution {public: void topk(int start,int end,int k,vector<int>& arr){ if(start>=end) return; int l=start; int r=end;原创 2020-12-28 23:03:37 · 87 阅读 · 0 评论 -
剑指 Offer 57 - II. 和为s的连续正数序列
https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/submissions/class Solution {public: vector<vector<int>> findContinuousSequence(int target) { int l=1,r=2; vector<vector<int>> ans;.原创 2020-12-28 22:18:04 · 127 阅读 · 1 评论 -
LeetCode 5502. 将子数组重新排序得到同一个二叉查找树的方案数
https://leetcode-cn.com/problems/number-of-ways-to-reorder-array-to-get-same-bst/组合+递归1.按照特定顺序插入,第一个节点就是根节点,后面的插入的都在根节点下面,所以无论怎么排序,第一个总是不变的。2.后面的可以分成两半,小于根节点的和大于根节点的,这两个集合互不影响,都是分别往根节点左边或根节点右边插入,所以只用考虑一个集合内的相对顺序。3.考虑左集合或右集合,就是递归了4.首先从后面的位置(左集合..原创 2020-08-30 17:56:49 · 214 阅读 · 0 评论 -
LeetCode 5497. 查找大小为 M 的最新分组
https://leetcode-cn.com/problems/find-latest-group-of-size-m/端点到区间的映射,有一个关键是,左右端点相同的时候,更改区间的一端的时候,不要删除原来的索引,因为还有另一个端点还在用。struct Node{ int l; int r; int size(){ return r-l+1; }};class Solution {public: int findLate..原创 2020-08-23 17:39:05 · 106 阅读 · 0 评论 -
LeetCode 5495. 圆形赛道上经过次数最多的扇区
https://leetcode-cn.com/problems/most-visited-sector-in-a-circular-track/位置的模拟,[开始位置,结束位置],然后从下一个位置开始。由于旋转,而且从1开始,直接写规则返回相比取余更加方便。由于包括结束位置,计数器加一后再判断是否要终止,由于需要从下一个位置开始,所以需要保存flag后对位置加1再退出。struct Node{ int pos; int cnt;};bool operato..原创 2020-08-23 17:34:26 · 131 阅读 · 0 评论 -
LeetCode 5481. 得到目标数组的最少函数调用次数
https://leetcode-cn.com/problems/minimum-numbers-of-function-calls-to-make-target-array/怎样才是最少次数呢,操作有对一个元素加1,对所有元素乘2。数组所有元素从0开始。反过来思考,对于一个奇数,它的操作是肯定是减1,不可能除2。对于一个偶数,可以减1也可以除2,显然除2比减1的次数更少。除2是对整个数组操作,这就要求所有都是偶数。所以就是奇数变成偶数,除2。不断重复。使用0的计数器。class..原创 2020-08-23 15:04:42 · 132 阅读 · 0 评论 -
LeetCode 5482. 二维网格图中探测环
https://leetcode-cn.com/problems/detect-cycles-in-2d-grid/dfs深搜找环,关键有两个优化地方:1.路径中只要包含环就可以,不一定要回到最开始搜索的节点2.如果一个点不在一个环中,那么后续搜索可以忽略这个节点,因为是多余的。如果不使用第一个优化,一定要回到最开始的搜索地方,那么第二个优化的地方只能排除最开始的节点,这样会超时,所以两个优化要同时使用class Solution {public: i..原创 2020-08-23 14:54:28 · 247 阅读 · 0 评论 -
LeetCode 206. 反转链表
https://leetcode-cn.com/problems/reverse-linked-list/这道题是我2017.11月底的时候百度面试的题。以两个节点为单位,一个前面的节点,一个后面的节点。开始的时候比较特殊,因为是后一个节点指向前一个节点,同时最后翻转的链表的尾部是NULL,所以一开始前面的节点是NULL。需要临时保存第三个节点的指针。/** * Definition for singly-linked list. * struct ListNode { * .原创 2020-08-04 10:27:19 · 112 阅读 · 0 评论 -
LeetCode 136. 只出现一次的数字
https://leetcode-cn.com/problems/single-number/只出现一次的数字,使用异或,可以达到时间O(N),复杂度O(1)。a^b^a=aclass Solution {public: int singleNumber(vector<int>& nums) { int a=0; int n=nums.size(); for(int i=0;i<n;i++){ ..原创 2020-08-04 10:05:42 · 89 阅读 · 0 评论 -
LeetCode 437. 路径总和 III
https://leetcode-cn.com/problems/path-sum-iii/原创 2020-08-03 20:32:57 · 123 阅读 · 0 评论 -
LeetCode 283. 移动零
https://leetcode-cn.com/problems/move-zeroes/双指针,快慢指针class Solution {public: void moveZeroes(vector<int>& nums) { int p=0; int q=0; int n=nums.size(); while(q<n){ if(nums[q]!=0){ ...原创 2020-08-02 16:18:52 · 117 阅读 · 0 评论 -
LeetCode 448. 找到所有数组中消失的数字
https://leetcode-cn.com/problems/find-all-numbers-disappeared-in-an-array/版本1先排序,后遍历。遍历的时候记录期望的数字,如果遇到的等于期望的数字,则通过。如果遇到的数字大于期望的数字,则说明有间隔,将这段间隔记录到结果里面。class Solution {public: vector<int> findDisappearedNumbers(vector<int>&am..原创 2020-08-02 15:48:37 · 157 阅读 · 0 评论 -
leetcode 5419. 两个子序列的最大点积
https://leetcode-cn.com/problems/max-dot-product-of-two-subsequences/dfs枚举版本,超时。参数状态包括 之前的最大和,以及两个位置。sum是sum+nums1[i]*nums2[j]。转换为动态规划的时候,dp[i][j],是包括两个最后结束位置i,j的值的点乘的。所以答案要不停的记住最大值。class Solution {public: int ans=-0x3f3f3f3f; int .原创 2020-05-24 15:12:55 · 242 阅读 · 0 评论 -
5407. 切披萨的方案数
https://leetcode-cn.com/problems/number-of-ways-of-cutting-a-pizza/最后留一块也要符合要求、要求披萨全部用完,以在倒数第二块的时候判断return。class Solution {public: int n,m; long long count=0; int K; vector<string> pizza; int record[55][55][15]; int m.原创 2020-05-10 20:35:53 · 382 阅读 · 0 评论 -
leetcode 5403. 有序矩阵中的第 k 个最小数组和
https://leetcode-cn.com/problems/find-the-kth-smallest-sum-of-a-matrix-with-sorted-rows/submissions/枚举,中途记录前k个最小和,遍历每行,把当前行的元素都加到上一行的前k个最小和,然后排序取前k个最小和。这关键的核心是,可以按行拆分,本行的k个最小和肯定来自上一行的k个最小和,因为如果...原创 2020-05-03 22:08:59 · 312 阅读 · 0 评论 -
leetcode 5402. 绝对差不超过限制的最长连续子数组
https://leetcode-cn.com/problems/longest-continuous-subarray-with-absolute-diff-less-than-or-equal-to-limit/同时维护两个队列,都是从旧到新,分别从大到小和从小到大。最左边的就是最大值和最小值。如果差值大于limit,则弹出最左的。要记录区间的最左端,弹出的时候更新最左端。c...原创 2020-05-03 14:34:23 · 167 阅读 · 0 评论 -
LeetCode 185. 部门工资前三高的所有员工
https://leetcode-cn.com/problems/department-top-three-salaries/这个是在where里求排名来筛选。# Write your MySQL query statement belowselect d.Name as 'Department', e1.Name as 'Employee', e1.S...原创 2020-04-30 00:07:53 · 154 阅读 · 0 评论 -
leetcode 234. 回文链表
https://leetcode-cn.com/problems/palindrome-linked-list/没啥难度的一道题,关键是处理好长度奇数偶数的问题、以及快慢指针要准确切一半的初始化、结束判断。栈先把值放进去,比较方便,【1,2】这样的链表,如果是在循环里面放,就进不了循环没放进去栈里。快慢指针先初始为1和2,然后判断next是否为空来判断是否最后一个。长度奇数的值...原创 2020-04-29 12:23:47 · 107 阅读 · 0 评论 -
leetcode 581. 最短无序连续子数组
https://leetcode-cn.com/problems/shortest-unsorted-continuous-subarray/找出后面有比这个数字小的最左数字,前面有比这个数字大的最右数字。要从两个方向跑,因为栈会弹出数字,后面可能会有比这个弹出数字小的数字,弹出了就找不到了。class Solution {public: int findUnsorte...原创 2020-04-29 00:08:04 · 104 阅读 · 0 评论 -
leetcode 39. 组合总和
https://leetcode-cn.com/problems/combination-sum/一个数字可以重复使用多次,用的时候dfs下标不用加1,这样可以用多次,加上大于target剪枝,也不会用太多。不用的时候下标要加1。class Solution {public: vector<int> run; vector<vector<in...原创 2020-04-28 22:17:37 · 113 阅读 · 0 评论 -
leetcode 48. 旋转图像
https://leetcode-cn.com/problems/rotate-image/submissions/由外层向内层遍历,每层都是一个正方形的四边。每条边需要更换len-1个。逆时针更换,最开始的存在temp里。class Solution {public: void rotate(vector<vector<int>>& mat...原创 2020-04-28 17:16:55 · 146 阅读 · 0 评论 -
leetcode 238. 除自身以外数组的乘积
https://leetcode-cn.com/problems/product-of-array-except-self/这种需要左边、右边连续区间的计算结果的,可以先从左到右和从右到左计算一遍,同时存起来。这样不用每个都计算左右区间的结果。class Solution {public: vector<int> productExceptSelf(vector...原创 2020-04-28 15:43:53 · 86 阅读 · 0 评论 -
leetcode 96. 不同的二叉搜索树
https://leetcode-cn.com/problems/unique-binary-search-trees/一棵树n个节点,根节点一个,剩下n-1个,左右子树分, 数量从0到n-1,然后乘起来,因为是步骤。class Solution {public: int numTrees(int n) { int dp[n+1]; mems...原创 2020-04-28 12:05:13 · 102 阅读 · 0 评论 -
LeetCode 148. 排序链表
https://leetcode-cn.com/problems/sort-list/链表排序用递归归并排序,复杂度nlognsplit链表和插入链表有一个dummy头结点方便很多。sortlist后记得重新赋值返回的头节点。/** * Definition for singly-linked list. * struct ListNode { * int...原创 2020-04-28 10:26:53 · 103 阅读 · 0 评论 -
leetcode 406. 根据身高重建队列
https://leetcode-cn.com/problems/queue-reconstruction-by-height/大的看不到前面小的,所以在大的插入小的,不影响。先按照身高从大到小、位置从前到后排序。然后插入到结果当中,当前结果的都是大于等于当前数字的,插入后不会影响已经插入的结果,同理,以后插入的也不会影响现在的结果,所以插入到现在的位置k。多次插入使用链表,使用a...原创 2020-04-27 22:32:46 · 174 阅读 · 0 评论 -
leetcode 142. 环形链表 II 287. 寻找重复数
https://leetcode-cn.com/problems/linked-list-cycle-ii/https://leetcode-cn.com/problems/find-the-duplicate-number/第一道题是环形链表第二道题,每一个数字可以看作是next下标,有一个重复数字,所以可以看作是链表有环。/** * Definition...原创 2020-04-27 20:45:49 · 141 阅读 · 0 评论 -
leetcode 215. 数组中的第K个最大元素
https://leetcode-cn.com/problems/kth-largest-element-in-an-array/关键在于枢纽元的选择上,不能选择第一个,不然很慢。class Solution {public: void quick(int l,int r,int k,vector<int>& nums){ if(l>...原创 2020-04-27 11:57:34 · 121 阅读 · 0 评论 -
LeetCode 236. 二叉树的最近公共祖先
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/递归实现最近公共祖先,函数返回该子树是否包含p,q。有两种情况,1.p、q在同一条路径上,所以需要找到了p或者q继续向下查找,找到了了的话最近公共祖先就是这个。2.p,q在两条支路上,那么最近公共祖先的左右子树各包含pq。/** * De...原创 2020-04-27 11:38:33 · 126 阅读 · 0 评论 -
leetcode 49. 字母异位词分组
https://leetcode-cn.com/problems/group-anagrams/实际上是一个字符计数的比较问题。先从字符数量,然后从字符按照顺序的大小,以及该字符的数量来比较。bool operator<( map<char,int> &a, map<char,int> &b){ if(a.size()!=b.si...原创 2020-04-27 09:53:45 · 123 阅读 · 0 评论 -
LeetCode 337. 打家劫舍 III
https://leetcode-cn.com/problems/house-robber-iii/枚举,最元素的位置可能隔两层,所以不是贪心。树形dp其实就是同时返回两个结果,免得对同一个节点调用两次,免得对一个节点重复调用,使得后面出现重复。/** * Definition for a binary tree node. * struct TreeNode { * ...原创 2020-04-26 22:17:27 · 146 阅读 · 0 评论 -
LeetCode 279. 完全平方数
https://leetcode-cn.com/problems/perfect-squares/这种最快凑数的,都是bfs。。。之前做过一道题,没反应过来。。。struct Node{ int val; int step;};class Solution {public: int numSquares(int n) { int ...原创 2020-04-26 21:31:13 · 89 阅读 · 0 评论 -
LeetCode 75. 颜色分类
https://leetcode-cn.com/problems/sort-colors/l表示左边的位置(不包括这个位置)都是0。r表示右边的位置(不包括这个位置)都是2。cur是从左到右遍历的位置(还未读取)遇到0的时候,cur要加1。cur和l相等的时候,如果cur不加1,就乱了。cur和l不相等的时候,就是cur小于l的时候,交换后cur位置的值是1,因为cur之前的都...原创 2020-04-26 20:55:19 · 97 阅读 · 0 评论 -
LeetCode 5394. 对角线遍历 II
https://leetcode-cn.com/problems/diagonal-traverse-ii/行号和列号之和相同的处于同一对角线,然后排序。struct Node{ int x; int y; int val;};bool operator<(const Node &a,const Node &b){ if(a...原创 2020-04-26 19:21:21 · 153 阅读 · 0 评论 -
LeetCode 5180. 带限制的子序列和
https://leetcode-cn.com/problems/constrained-subset-sum/s原创 2020-04-26 18:50:51 · 208 阅读 · 0 评论 -
leetcode 5393. 可获得的最大点数
https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/代码是贪心。题解https://leetcode-cn.com/problems/maximum-points-you-can-obtain-from-cards/solution/tan-xin-qian-zhui-he-by-wuwenj...原创 2020-04-26 18:34:37 · 146 阅读 · 0 评论 -
leetcode 399. 除法求值
https://leetcode-cn.com/problems/evaluate-division/关键是转换成图的问题,a/b=2,那么a到b的边权重是2,b/c=4,b到c的权重是4,那么a到c就是路径的权重乘起来。中间的约去了。然后就是要把倒数也加入到图上。class Solution {public: map<string,in...原创 2020-04-26 10:25:04 · 137 阅读 · 0 评论 -
leetcode 309. 最佳买卖股票时机含冷冻期
https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/枚举型dp[i][j],前i个,j:0买入,1卖出,冷冻不用管,由于是枚举上一次操作的日期,买入的上一次卖出是前2天之前。class Solution {public: int maxProfit(vector&l...原创 2020-04-24 22:19:36 · 99 阅读 · 0 评论