leetcode刷题总结201-250
201. 数字范围按位与
描述:
输入: [5,7]
输出: 4
思路:范围的数字每个数字右移一位。当都一样之后就可以停止了。然后把0添加上。
202. 快乐数
描述:
输入:19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
思路:把每个数字按照逻辑计算即可。用一个hashset存储已经出现的数字,重复出现就停止。
203. 移除链表元素
204. 计数质数
描述:
输入: 10
输出: 4
解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。
思路:编写一个函数用于判断这个数是质数(i从头遍历到根号N.)然后将1-10的数字是否是数字置为true,然后从头开始判断,偶数不判断,遇到质数,就把质数的倍数也置为false.
205. 同构字符串
描述:
输入: s = "egg", t = "add"
输出: true
思路:hashmap存储。
206. 反转链表
207. 课程表
描述:
输入: 2, [[1,0]]
输出: true
解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。
思路:图的拓扑。
208. 实现 Trie (前缀树)
209. 长度最小的子数组
描述:
输入:s = 7, nums = [2,3,1,2,4,3]
输出:2
解释:子数组 [4,3] 是该条件下的长度最小的子数组。
思路:双指针控制窗口的长度。
210. 课程表 II
描述:
输入: 2, [[1,0]]
输出: [0,1]
解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。
思路:图的拓扑排序。
211. 添加与搜索单词 - 数据结构设计
描述:
思路:字典树+回溯。
212. 单词搜索 II
描述:
思路:words先用字典树存储。然后在方格中上下左右遍历。其中用到回溯即可。
213. 打家劫舍 II
思路:动态规划
214. 最短回文串
描述:
思路:可以将此字符串和反转进行拼接,用KMP算法求next数组。通过数组的值来
215. 数组中的第K个最大元素
描述:
思路:快速排序。比如先选3,最后决定了3的最终位置是第三个。那么k=2就在前面取快排继续找。
216. 组合总和 III
描述:
思路:回溯算法。
217. 存在重复元素
思路:hash
218. 天际线问题
描述:
思路:分治。分治最终进行合并两个天际线。合并的时候需要考虑重合问题。先去处理x重合,ymax的情况。再去加上剩余的。
219. 存在重复元素 II
描述:
思路:hashset存储窗口
220. 存在重复元素 III
描述:
思路:treeset中的ceiling函数。用于处理t的范围。
221. 最大正方形
描述:
思路:动态规划。dp[i][j]代表当前点的最大正方形面积。dp[i][j]=min(i-1,j-1;i-1,j;i,j-1)+1(i,j为1的话)
222. 完全二叉树的节点个数
描述:
思路:递归。
223. 矩形面积
描述:
思路:两个相加-共同的。
224. 基本计算器
225. 用队列实现栈
226. 翻转二叉树
227. 基本计算器 II
228. 汇总区间
229. 求众数 II
描述:
思路:投票法。选取几个种子。当出现这个种子++;否则--;‘当小于0后换当前这个种子,最后统计。
230. 二叉搜索树中第K小的元素
思路:深度优先进行中序遍历。
231. 2的幂
思路:移位。
232. 用栈实现队列
233. 数字 1 的个数
描述:
输入: 13
输出: 6
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。
思路:统计规律。
234. 回文链表
描述:
输入: 1->2->2->1
输出: true
思路:快慢双指针找到中点。反转后面的。然后开始遍历。
235. 二叉搜索树的最近公共祖先
描述:
思路:根节点判断都小于还是都大于,还是小于大于。
236. 二叉树的最近公共祖先
描述:
思路:递归查找。left,right。left=null证明都在右边。否则都在左边。left!=null&&right!=null 直接返回当前root
237. 删除链表中的节点
238. 除自身以外数组的乘积
描述:
输入: [1,2,3,4]
输出: [24,12,8,6]
思路:从左往右。从右往左。分别计算当前元素的前面的成绩。然后两个数组对应位置成绩。
239. 滑动窗口最大值
描述
思路:双端队列。保证队列的头部为当前窗口的最大值。队列记录的是当前最大值的下标,用于处理窗口的大小。队列是单调递减的。
240. 搜索二维矩阵 II
241. 为运算表达式设计优先级
描述:
输入: "2*3-4*5"
输出: [-34, -14, -10, -10, 10]
解释:
(2*(3-(4*5))) = -34
((2*3)-(4*5)) = -14
((2*(3-4))*5) = -10
(2*((3-4)*5)) = -10
(((2*3)-4)*5) = 10
思路:通过运算符进行分治。
242. 有效的字母异位词
描述:
输入: s = "anagram", t = "nagaram"
输出: true
思路:hash
243-250。。。。