leetcode分类刷题

双指针

11. 盛最多水的容器

求一个正方形的最大面积,用逆向的双指针,然后贪心求大

42. 接雨水

雨水的性质是踏只会留在一个凹的空间内,所以其实是凹空间的面积,还是用逆向双指针

283. 移动零

把0移到后面等于把非零移到前面,从前向后考虑容易理解,用同向双指针,<i:都是非零,<j:处理过,j:当前处理,>j:未处理,如果j非零,和i交换

80. 删除有序数组中的重复项 II

同向双指针,最多k个就是nums[r] != nums[l - k],这样的放到l

1047. 删除字符串中的所有相邻重复项

消消乐,用栈

二分

410. 分割数组的最大值

二分其实主要就是写检查函数,检查函数最好是给定一个二分值,容易检查的那种。
这题因为是连续子数组,所以检查就是循环一遍然后判断。

1231. 分享巧克力

和410类似,这题缩小范围是向右缩小的,要用l+1<r,结果要判断r是否通过检查,通过用r,不通过用l,不这样会死循环

852. 山脉数组的峰顶索引

这个检查函数很简单

1011. 在 D 天内送达包裹的能力

和410类似

1292. 元素和小于等于阈值的正方

二分不难,二维前缀和了解一下

链表

237. 删除链表中的节点

乐子题要用乐子解法,把node->next复制到node,然后把node->next删掉

141. 环形链表

快慢指针

92. 反转链表 II

分两步,1:明确需要用的指针,2:修改指针的next
一个技巧是选一个中间节点直接把修改后的线画出来,然后倒序的修改这些线

25. K 个一组翻转链表

用92的代码,每k个调一次就行

20. 有效的括号

这题感觉是栈的模版

496. 下一个更大元素 I

找下一个更大的就是单减栈

503. 下一个更大元素 II

循环就是在后面再重复一份

394. 字符串解码

这里的栈感觉像一个存储器,遇到[意味着要存,遇到]意味着要取

636. 函数的独占时间

模拟调用栈,然后可以用一个数字记录时间戳,含义是当前可用的一个时间戳

84. 柱状图中最大的矩形

找下一个更小的,用单增栈,左右都知道后,循环求大就行

347. 前 K 个高频元素

前k个就是堆,感觉用lambda表达式写比较函数比较简洁

253. 会议室 II

按开始时间从小到大排序,priority_queue的比较函数是反序的,sort的比较函数是正序的,然后维护一个会议室结束时间的小根堆,结果就是堆的最终大小

295. 数据流的中位数

这题就是个端水大师,维护大根堆、小根堆,关键是大根堆的大小等于小根堆的大小或者等于小根堆大小加一,这样奇数个时中位数就是大根堆的根,偶数时就是两个根的平均。做法是先判空,让两个堆都有一个,后面的数和小根堆的根比较,小的放到大根堆,大的放到小根堆,放的同时如果两个堆的大小不合法了,就调整一下

767. 重构字符串

先统计每个字母的数量,如果最大数量超过(size()+1)/2,做不到,不然放到大根堆里,每次用根,如果根和ans末尾相同,要用第二个

703. 数据流中的第 K 大元素

第k大就是小根堆,维护一个大小为k的小根堆,初始化时如果大小<k,直接入堆,如果大小=k,比根大的入堆,然后根出堆,add时是一样的,根就是第k大

哈希表

3. 无重复字符的最长子串

同向双指针,用集合记录l-r的所有字母

49. 字母异位词分组

c++的sort能在字符串上用,还是c++香

138. 复制带随机指针的链表

复制链表是简单的,用哈希表记录老节点、新节点的映射,这样就可以复制随机指针了,用递归写代码会比较简单

340. 至多包含 K 个不同字符

类似3,只不过用unordered_map记录l-r的所有字母出现的次数

554. 砖墙

数学题,用unordered_map记下数,记中间的前缀和的数,答案就是n-max(计数)

535. TinyURL 的加密与解密

算hashCode,加密就是url2hashCode,拼成一个tinyUrl,解密就是hashCode2Url

树bfs

101. 对称二叉树

写个函数检查两个树是不是对称的,答案就是给的树和自己是不是对称的

103. 二叉树的锯齿形层序遍历

类似101

111. 二叉树的最小深度

类似101

515. 在每个树行中找最大值

类似101

429. N 叉树的层序遍历

类似101

树dfs

98. 验证二叉搜索树

二叉搜索树的最小值在最左叶节点,最大值在最右叶节点,也可以中序遍历后判断是不是单增序列

110. 平衡二叉树

求树的高度,遍历的过程中判断即可

113. 路径总和 II

dfs(TreeNode* root, int targetSum, int nowSum, vector p),状态是当前节点、目标和、当前和(之前节点的和,不包括当前节点)、当前路径(之前节点,不包括当前节点)

236. 二叉树的最近公共祖先

背答案,我快乐

450. 删除二叉搜索树中的节点

这题还是背答案

508. 出现次数最多的子树元素和

求子树和,统计以后返回出现次数最多的

图bfs

934. 最短的桥

灌水+层序

310. 最小高度树

bfs求最长路+记录最长路径,答案是最长路径的中间节点

1091. 二进制矩阵中的最短路径

bfs求最短路,bfs最好写层序遍历,踩了个heap-use-after-free的坑,auto&只能用在函数传参和循环这些地方,其他地方用auto,不然会出错

994. 腐烂的橘子

层序

863. 二叉树中所有距离为 K 的结点

建图+层序

317. 离建筑物最近的距离

反向bfs

图bestfs

264. 丑数 II

背答案

373. 查找和最小的 K 对数字

贪心,(i, 0)先入堆,每次取小根堆的根,然后(i, j + 1)入堆

778. 水位上升的泳池中游泳

二分+灌水

378. 有序矩阵中第 K 小的元素

大根堆

图dfs

133. 克隆图

灌水

399. 除法求值

建图+灌水

785. 判断二分图

灌水

841. 钥匙和房间

灌水

dp

90. 子集 II

回溯

22. 括号生成

回溯

746. 使用最小花费爬楼梯

一维dp

70. 爬楼梯

一维dp

35. 搜索插入位置

二分

53. 最大子数组和

一维dp

343. 整数拆分

一维dp

279. 完全平方数

一维dp

338. 比特位计数

位运算

303. 区域和检索 - 数组不可变

前缀和

140. 单词拆分 II

一维dp

二维dp

931. 下降路径最小和

二维dp

62. 不同路径

二维dp

120. 三角形最小路径和

用931的代码

304. 二维区域和检索 - 矩阵不可变

二维前缀和

115. 不同的子序列

两个序列,其实就是二维dp

516. 最长回文子序列

二维dp,函数传参用const+&,不然会超时

873. 最长的斐波那契子序列的长度

状态是两个下标

1312. 让字符串成为回文串的最少插入次数

状态是区间左右端点,感觉有些题就像个模板,模板部分都是一样的,主要是根据不同题目确定非模板部分怎么写

312. 戳气球

状态是区间左右端点,状态转移是for循环中间端点

1000. 合并石头的最低成本

看不懂

322. 零钱兑换

一维dp

123. 买卖股票的最佳时机 III

一次交易的推广

887. 鸡蛋掉落

看不懂

1335. 工作计划的最低难度

记忆化搜索

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值