LeetCode经典题
33
SYaoJun
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
739. 每日温度
分析题目:739. 每日温度思路:右下降栈,模板题。考查点: 单调栈代码class Solution {public: vector<int> dailyTemperatures(vector<int>& A) { // 翻译一下:找到下一个更大更大元素 右下降栈 int n = A.size(); vector<int> res(n); stack<int> st原创 2021-10-10 14:37:36 · 193 阅读 · 0 评论 -
LeetCode题目汇总目录
简介从2021.年10月5日开始整理,记录一些经典题的解法,方便自己检索和查阅。周赛2021.10.3 261场周赛2题 1255/36022021.10.2 62场双周赛3题 294/2807题解区间问题题号标签推荐难度题解备注56. 合并区间排序★ ★★★4星C++57. 插入区间模拟★ ★★5星C++可能做不出1288. 删除被覆盖区间模拟★ ★★4星C++区间DP题号标签推荐难度题解原创 2021-10-05 22:25:31 · 316 阅读 · 0 评论 -
209. 长度最小的子数组
思路考查点:双指针达到目标值就开始滑动左边的指针代码class Solution {public: int minSubArrayLen(int target, vector<int>& nums) { int n = nums.size(); int len = n + 1; for(int i = 0, j = 0, s = 0; i < n; i++){ s += nums[i]; whil原创 2021-10-03 23:19:54 · 169 阅读 · 0 评论 -
1248. 统计「优美子数组」
思路考查点:哈希表题目:1248. 统计「优美子数组」思路: 从前往后统计奇数的个数,k = curOdd - preOdd目标奇数 = 当前前缀奇数总数 - 某个前面位置的前缀奇数总数。当我们把前缀奇数放入哈希表以后,等式转换为preOdd = curOdd - k只要这个preOdd存在,就说明是我们需要的一个答案,依次累加进最终结果。代码class Solution {public: int numberOfSubarrays(vector<int>& nu原创 2021-10-03 10:00:19 · 189 阅读 · 0 评论 -
5874. 分割数组的最多方案数
思路分割数组的最多方案数考查点:前缀和+哈希表看到有连续的子数组和,很明显在提示用前缀和,分析出要尽快获取前后缀匹配的数量,可以用哈希表。比较难处理的就是题目可以改变数组中某个数组,此时只影响前缀和后面的结果,因此我们可以将要查的值分为两段。当前修改元素之前的数当前修改元素之后的数更新数组后,目标值也改变了,我们可以考虑在修改元素之前求目标值,更新元素之后求修改后的目标值,两者之和即是结果。注意点:结果可能会超过int,记得使用long long62场双周赛,这是我最接近AK原创 2021-10-03 08:49:11 · 351 阅读 · 0 评论 -
解码方法【两道经典题】
解码方法91 Decode Ways考点:递推 或者 动态规划class Solution {public: int numDecodings(string s) { // 进阶版 青蛙跳台阶 // f[i]表示前i个数总的解码方案数,分析最后一个不同点,第i位可以是一个字符组成的字母,也可以和前一位结合组成的字母。 int n = s.size(); s = ' ' + s; vector<int&g原创 2021-09-27 08:25:40 · 372 阅读 · 0 评论 -
5882. 网格游戏
题目链接代码考点:前缀和思路:枚举第一个机器人向下走的位置class Solution {public: using LL = long long; long long gridGame(vector<vector<int>>& grid) { // 枚举第一个机器人向下走的位置 int n = grid[0].size(); vector<LL> f(n+1), g(n+1);原创 2021-09-26 22:35:41 · 341 阅读 · 0 评论 -
324. 摆动排序 II
代码思路:构造数组,先排序。从左到右的奇数位,从大到小开始放,x 6 x 5 x 4,奇数位放完之后,再从左到右放偶数位3 6 x 5 x4class Solution {public: void wiggleSort(vector<int>& nums) { vector<int> org(nums); sort(org.begin(), org.end()); int n = nums.原创 2021-09-25 20:23:57 · 165 阅读 · 0 评论 -
767. 重构字符串
Leetcode767 题目链接解题思路贪心:每次从堆中取出两个字母,并将对应的出现次数减一。class Solution {public: string reorganizeString(string S) { //2020.11.30 unordered_map<char, int> hash; priority_queue<pair<int, char>> pq; for(auto c:原创 2020-11-30 12:25:21 · 255 阅读 · 0 评论 -
845. 数组中的最长山脉
题目连接解题思路:简单的动态规划题注意点:数组为空时需要特判class Solution {public: int longestMountain(vector<int>& A) { if(A.empty()) return 0; //两个数组,一个数组记录从左往右的最大值 //另一个数组记录从右往左的最大值 int n = A.size(); vector<int> B(n原创 2020-10-25 10:04:51 · 369 阅读 · 1 评论 -
494. 目标和
题目类型:动态规划 深搜难度:中等版本1暴搜 选与不选时间复杂度O(2n)O(2^n)O(2n)class Solution {public: int n, res = 0; void dfs(int u, vector<int>&nums, long long target){ if(u==n){ if(...原创 2020-04-23 21:50:44 · 267 阅读 · 0 评论 -
329. 矩阵中的最长递增路径
题目类型:深搜 记忆化递归难度:困难题意:从一个二维矩阵中找到一个严格递增的路径。使用深度搜索,不需要标记,因为到当前点是需要满足比原来点数值大的,所以也不会重复遍历。然后使用记忆化递归记录最长的路径,如果已经计算过了直接返回。备注:2020.4.18字节跳动三面面试题。面试官提示我使用回溯,其实没必要,因为递增这个条件限制了不可能会重复使用某个点。class Solution {pu...原创 2020-04-18 22:37:09 · 277 阅读 · 0 评论 -
71. 简化路径
题目难度:中等类型:栈 字符串题意:把unix中的复杂路径简化为最简洁的路径。一个点号表示当前目录,两个点号上一个目录。我的思路是使用栈来存储斜杠中间的内容。这里面不仅包含文件名,同时也会包含两个点号,或者一个点号的情况。所以每次入栈以后先判断栈顶是不是点号的情况。最后将路径名和斜杠拼接起来。备注:2020.4.18号字节跳动二面面试题,当时思路不是特别清晰,面试官给了我很多提醒,晚上特意...原创 2020-04-18 19:55:31 · 266 阅读 · 0 评论 -
738. 单调递增的数字
题目难度:中等类型:贪心题意:遇到逆序,就将当前位减1,同时将后面的数全部置为9。循环判断检查前面是否产生了逆序。class Solution {public: int monotoneIncreasingDigits(int N) { if(N < 10) return N; deque<int> num; //...原创 2020-04-15 16:59:04 · 264 阅读 · 0 评论 -
41. 最大子数组
lintcode题目类型:数组难度:简单题意:看到子数组直接上前缀和,然后有最值问题,考虑从前往后维护一个最值。这才是通解,以前总是死记一个前缀和小于0时重新开始,现在开始走通用之路了,顶不住。class Solution {public: int maxSubArray(vector<int> &nums) { int n = nums....原创 2020-04-15 13:32:09 · 223 阅读 · 0 评论 -
44. 最小子数组
lintcode题目难度:简单类型:数组版本1class Solution {public: int minSubArray(vector<int> &nums) { int n = nums.size(); vector<int> sum(n+1, 0); for(int i = 0; i <...原创 2020-04-15 13:15:36 · 268 阅读 · 0 评论 -
749. 约翰的后花园
lintcode题目类型:枚举难度:入门版本1两重循环枚举。class Solution {public: string isBuild(int x) { bool flag = true; for(int i = 0; i <= 1000; i++){ for(int j = 0; j <= 1000; j+...原创 2020-04-13 10:41:55 · 225 阅读 · 0 评论 -
461. 无序数组K小元素
lintcode题目难度:中等类型:分治题意:求出数组第k小的数,可以使用优先队列,也可以使用快排。按照快排的思路,先寻找分割点,然后讲分割点两边的数据满足左边小于关键字,右边大于关键字,然后统计左边的数量left和k的相对大小,如果左边的数量比k大,说明第k小的数,一定在左边,所以直接求左边,反之在右边。时间复杂度:堆O(nlgn)O(nlgn)O(nlgn) 快排O(n)O(n)O(...原创 2020-04-12 22:28:35 · 415 阅读 · 0 评论 -
1184. 公交站间的距离
题目类型:数组难度:简单题意:从循环的车站中,找到从start到destination的最短路径。因为车站的总长度确定,所以要么正向走,要么逆向走,先求出来总长度,然后再与正向的相减,取最小的,就是要求的结果。class Solution {public: int distanceBetweenBusStops(vector<int>& dist, int s...原创 2020-04-10 10:25:32 · 206 阅读 · 0 评论 -
1176. 健身计划评估
题目难度:简单类型:数组题意:找到连续k天的值与lower和upper的大小,如果大于upper加1分,如果小于lower减一分。注意必须要超过k天之后才能开始计算。class Solution {public: int dietPlanPerformance(vector<int>& c, int k, int lower, int upper) { ...原创 2020-04-10 10:18:05 · 507 阅读 · 0 评论 -
1128. 等价多米诺骨牌对的数量
题目难度:简单类型:数组题意:找到所有的相同数组对。我最开始理解错了,这种相同数对最多是k*(k-1)/2, 我开始理解成了阶乘个,所以一直错。以下并不是最优解法,只是一种思路,即先排序把相同的数对放在一起,然后统计相同数对的数量。最后把相同的数对用上面的公式求一下,就是最终结果。class Solution {public: int numEquivDominoPairs(ve...原创 2020-04-10 10:08:14 · 192 阅读 · 0 评论 -
1232. 缀点成线
题目难度:简单类型:数学题意:判断一系列点是否在同一直线上。类似于直线上最多的点数leetcode149。这道题的思路是首先确定两个点的斜率,然后判断后面的点构成的斜率是否和最开始的斜率相同。class Solution {public: bool checkStraightLine(vector<vector<int>>& coor) { ...原创 2020-04-10 09:27:42 · 190 阅读 · 0 评论 -
会议室 II
难度:中等类型:数组题意:找到最少使用的会议室数,可以用上下车的思维来考虑。会议室的开始时间为上车,会议室的结束时间为下车,我们需要统计在车上的人的最大数量。按照时间的先后顺序排序,注意如果在同一个时刻既有上车又有下车的人,先下后上,腾出最大的空间。随意排序的时候加入了第二个关键字,就是为了防止上车的先算。class Solution {public: int minMeeting...原创 2020-04-08 13:05:50 · 327 阅读 · 0 评论 -
113. 路径总和 II
题目:113. Path Sum II难度:中等类型:树 深搜星级:五星推荐版本12020.3.20精简版class Solution {public: vector<vector<int>> res; vector<int> temp; vector<vector<int>> pathSum(Tre...原创 2020-03-30 15:24:33 · 178 阅读 · 0 评论 -
218. 天际线问题
题目:218. The Skyline Problem难度:困难类型:扫描线 大根堆 平衡二叉树星级:五星推荐class Solution {public: vector<vector<int>> getSkyline(vector<vector<int>>& buildings) { //注意重叠 建筑的左...原创 2020-03-30 13:31:17 · 285 阅读 · 0 评论 -
149. 直线上最多的点数
题目:149. Max Points on a Line类型:数学 斜率 最大公约数难度:困难星级:五星推荐题意:找到一条直线上最多的点,注意点有可能有重叠,斜率可能为0和无穷大。推荐:花花酱视频讲解class Solution {public: int maxPoints(vector<vector<int>>& points) { ...原创 2020-03-30 11:54:14 · 218 阅读 · 0 评论 -
93. 复原IP地址
题目:93. Restore IP Addresses难度:中等类型:深搜 字符串星级:五星推荐题意:把一个字符串恢复成所有可能的IP地址,注意0不能作为每段的开头。class Solution {public: vector<string> res; vector<int> temp; int n; vector<stri...原创 2020-03-29 22:19:42 · 215 阅读 · 0 评论 -
42. 接雨水
题目:42. Trapping Rain Water难度:困难类型:双指针 动态规划星级:五星推荐题意:柱子的高度是由两边的最小值决定的,统计两边的最值,然后取最小的高度与原高度相减。版本1class Solution {public: int trap(vector<int>& h) { int n = h.size()...原创 2020-03-29 21:18:29 · 186 阅读 · 0 评论 -
1109. 航班预订统计
题目类型:差分数组难度:中等class Solution {public: int dp[20005]; vector<int> corpFlightBookings(vector<vector<int>>& book, int n) { //差分数组 vector<int> ...原创 2020-03-29 13:24:30 · 199 阅读 · 0 评论 -
54. 螺旋矩阵
题目类型:数组 模拟难度:中等class Solution {public: vector<int> spiralOrder(vector<vector<int>>& matrix) { int m = matrix.size(); if(!m) return {}; int n = mat...原创 2020-03-29 12:54:59 · 185 阅读 · 0 评论 -
772. 基本计算器 III
题目难度:困难类型:递归 栈class Solution {public: int calculate(string s) { int j = 0; for(int i = 0; i < s.size(); ){ while(i < s.size() && s[i]==' ') i++; ...原创 2020-03-29 09:43:22 · 819 阅读 · 0 评论 -
227. 基本计算器 II
题目类型:双栈难度:中等class Solution {public: int calculate(string s) { //yxc 2020.3.29 //乘除法先算 stack<char> op; stack<int> num; s +="+0"; //处理边界 ...原创 2020-03-29 09:42:10 · 265 阅读 · 0 评论 -
224. 基本计算器
题目难度:困难类型:递归 栈class Solution {public: int calculate(string s) { //递归 2020.3.29 先把空格搞定 int j = 0; for(int i = 0; i < s.size(); ){ while(i < s.size() &a...原创 2020-03-29 09:40:57 · 242 阅读 · 0 评论 -
452. 用最少数量的箭引爆气球
题目类型:贪心难度:中等题意:按照end从小到大排序 如果start > R更新R作为本次射箭的最右边界 R以内的所有气球都可以引爆class Solution {public: int findMinArrowShots(vector<vector<int>>& points) { //2020.3.28 贪心 ...原创 2020-03-28 10:15:54 · 199 阅读 · 0 评论 -
435. 无重叠区间
题目类型:贪心难度:中等题意:删除最少的重叠区间。对于[L, R]区间,按照R从小到大排序。class Solution {public: int eraseOverlapIntervals(vector<vector<int>>& intervals) { if(intervals.empty()) return 0; ...原创 2020-03-28 10:02:33 · 207 阅读 · 0 评论 -
820. 单词的压缩编码
题目类型:字典树难度:中等题意:快速找出所有后缀。class Solution {public: int minimumLengthEncoding(vector<string>& words) { //32020.3.28 美学暴力 待字典树优化 unordered_set<string> good(words.b...原创 2020-03-28 09:29:34 · 253 阅读 · 0 评论 -
408. 有效单词缩写
题目类型:字符串难度:简单题目:判断一个字符串是否是另一个字符串的有效缩写。注意缩写中出现0就是错的。class Solution {public: bool validWordAbbreviation(string word, string abbr) { int t = 0, i, j; bool ok = true; for(...原创 2020-03-27 10:10:43 · 524 阅读 · 0 评论 -
624. 数组列表中的最大距离
题目难度:简单类型:数组题意:从不同行中找到最大差值,首先找到最大值和最小值,然后再用不同行的去求差值。class Solution {public: int maxDistance(vector<vector<int>>& arrays) { //先找到最大最小值的行 int mini=0, maxi=0, min...原创 2020-03-27 09:49:53 · 367 阅读 · 0 评论 -
1033. 移动石子直到连续
题目类型:数学规律难度:简单题意:先排序,由于只能移动两边的石头,所以可以找一下规律。class Solution {public: vector<int> numMovesStones(int a, int b, int c) { int x = min(min(a,b), c); int z = max(max(a,b), c);...原创 2020-03-27 09:20:21 · 204 阅读 · 0 评论 -
1056. 易混淆数
题目类型:模拟难度:简单题意:旋转180度后判断是否产生了一个有效的新数,180度不仅从数字本身,串也要反转。class Solution {public: bool confusingNumber(int N) { int a[10]={0}, b[10]={0}; int ord = 0, k = 0, nw = 0; do{...原创 2020-03-27 08:50:09 · 205 阅读 · 0 评论
分享