![](https://img-blog.csdnimg.cn/a0971da438dc424a8e80f3043d51fdbf.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Leetcode高频面试题
文章平均质量分 76
Leetcode刷题,复习算法
路哞哞
一些笔记和心得而已。
展开
-
第0章 刷题题单
Leetcode 704 二分查找Leetcode 35 搜索插入位置Leetcode 34 在排序数组中查找元素的第一个和最后一个位置Leetcode 69 x 的平方根Leetcode 367 有效的完全平方数Leetcode 27 移除元素Leetcode 26 删除有序数组中的重复项Leetcode 283 移动零Leetcode 844 比较含退格的字符串Leetcode 977 有序数组的平方Leetcode 209 长度最小的子数组Leetcode 904 水果成篮Leetcode 76 最小原创 2023-05-17 11:21:04 · 264 阅读 · 0 评论 -
第一章 数组
target不在数组的大小范围内target在数组的大小范围内,但是target不在数组中target在数组的大小范围内且在数组中public :// 情况一 if(rightBorder - leftBorder > 1) return {// 情况三 return {// 情况二 } // 寻找右边界 int getRightBorder(vector < int > & nums , int target) {// 初始值 while(l <= r) {原创 2023-05-14 09:56:10 · 305 阅读 · 0 评论 -
第二章 链表
先统计两个链表长度,再将较长链表先遍历到两个链表能尾部对其的位置,再开始遍历。原创 2023-05-15 09:24:51 · 337 阅读 · 0 评论 -
第三章 哈希表
先对数组排序,然后使用两个指针分别指向两个数组开始,如果两个指针指向元素不相等,将数值较小的指针右移。如果两个指针指向元素相同,则将该元素加入结果中,并同时右移两个指针。,字符进入窗口相应元素数目减一,出窗口加一。如果使用哈希表,这个题目不好判重,会非常麻烦,细节很多。对于第三种情况,考虑每一位数的最大数字的下一个数(即每一位数平方之和)是多少。这个题目和上一个题目类似,结果依然使不能重复的,唯一区别在于多了一层。之后只需要把字符串的首地址赋值过去,可以减少一次拷贝操作,提高效率。表示字符串平均长度。原创 2023-05-16 11:04:08 · 247 阅读 · 0 评论 -
第四章 字符串
可以先统计字符串中空格的个数,然后将字符串长度扩充到替换后的字符串的长度。接下来,采用双指针从后往前遍历,在由重复子串组成的字符串中,最长相等前后缀不包含的子串就是最小重复子串。指向旧长度的末尾,遇到空格就替换掉。详细 KMP 算法解释见。为了将时间复杂度做到。原创 2023-05-17 09:36:20 · 233 阅读 · 0 评论 -
第五章 栈与队列
使用优先队列(披着队列外衣的堆),如果使用的是大顶堆,每次弹出堆顶最大的一个数,就不能保证题目找出频率最高的。个数,而且使用大顶堆每次要对整个堆进行排序,浪费时间。如果是使用小顶堆,每次仅保留。方便再前后两端进行操作,但是这里可以直接使用一个数组。个频率最高的元素在堆里面,就需要只对。的作用是队列中队头和队尾的位置。个元素进行排序,节省时间开销。这个题目参考文章里面使用了库。单调队列经典题目,具体实现看。代替,效率更高,数组。原创 2023-05-17 11:21:14 · 225 阅读 · 0 评论 -
第六章 二叉树
目录一、二叉树的遍历方式1.1 二叉树的前序遍历1.1.1 N 叉树的前序遍历1.2 二叉树的中序遍历1.3 二叉树的后序遍历1.3.1 N 叉树的后序遍历1.4 二叉树的层序遍历1.4.1 二叉树的层序遍历 II1.4.2 二叉树的右视图1.4.3 二叉树的层平均值1.4.4 N叉树的层序遍历1.4.5 在每个树行中找最大值1.4.6 填充每个节点的下一个右侧节点指针1.4.7 填充每个节点的下一个右侧节点指针II1.4.8 二叉树的最大深度1.4.9 二叉树的最小深度二、二叉树的属性2.1 对称二叉树2原创 2023-05-22 08:38:32 · 292 阅读 · 0 评论 -
第七章 回溯
那么就可以在 for 循环中增加判断条件:如果下一层的 sum(就是本层的 sum + candidates[i])已经大于 target,就可以结束本轮 for 循环。排列是有序的,也就是说 [1,2] 和 [2,1] 是两个集合,这和之前的子集以及组合所不同的地方。的时候,依然是会进入下一层递归,只是在下一层递归结束判断的时候,会判断。组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!棋盘的宽度就是for循环的长度,递归的深度就是棋盘的高度。的时候,同样不满足题目条件了。原创 2023-05-24 10:17:45 · 467 阅读 · 0 评论 -
第八章 贪心
上面使用 vector 非常费时,C++ 中 vector(可以理解是一个动态数组,底层是普通数组实现的)如果插入元素大于预先普通数组大小,vector 底部会有一个扩容的操作,即申请两倍于原先普通数组的大小,然后把数据拷贝到另一个更大的数组上。所以使用 vector(动态数组)来 insert,是费时的,插入再拷贝的话,单纯一个插入的操作就是。那么要是最终利润最多,就只需要统计为正数的利润即可,正利润的区间就是股票买卖的区间。账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5。原创 2023-05-27 08:41:24 · 617 阅读 · 0 评论 -
第九章 动态规划
目录一、基础题目1.1 斐波那契数1.2 爬楼梯1.3 使用最小花费爬楼梯1.4 不同路径1.5 不同路径 Ⅱ1.6 整数拆分1.7 不同的二叉搜索树二、背包问题2.1 01 背包2.1.1 分割等和子集2.1.1.1 划分为k个相等的子集2.1.1.2 火柴拼正方形2.1.2 最后一块石头的重量 Ⅱ2.1.3 目标和2.1.4 一和零2.2 完全背包2.2.1 零钱兑换 Ⅱ2.2.2 组合总和 Ⅳ2.2.3 爬楼梯2.2.4 零钱兑换2.2.5 完全平方数2.2.6 单词拆分2.3 多重背包三、打家劫舍3原创 2023-06-03 09:17:37 · 582 阅读 · 0 评论 -
第十章 单调栈
从栈头(元素从栈头弹出)到栈底的顺序应该是从小到大的顺序。因为一旦发现添加的柱子高度大于栈头元素了,此时就出现凹槽了,栈头元素就是凹槽底部的柱子,栈头第二个元素就是凹槽左边的柱子,而添加的元素就是凹槽右边的柱子。当前列雨水面积:min(左边柱子的最高高度,记录右边柱子的最高高度) - 当前柱子高度。单调栈:求一个元素右边第一个更大元素,单调栈就是递增的;求一个元素右边第一个更小元素,单调栈就是递减的。遇到相同的元素,更新栈内下标,就是将栈里元素(旧下标)弹出,将新元素(新下标)加入栈中。原创 2023-05-28 08:33:59 · 846 阅读 · 0 评论 -
第十一章 其它题目
方法二:计算出总的岛屿数量,因为有一对相邻两个陆地,边的总数就减 2,那么在计算出相邻岛屿的数量就可以了。方法一:遍历每一个空格,遇到岛屿,计算其上下左右的情况,遇到水域或者出界的情况,就可以计算边了。方法三:将链表分割成两个链表,然后把第二个链表反转,最后再拼接。排序 + 哈希 + 从后往前遍历(方便处理数值相同的情况)代码中未统计下边和右边的相邻矩阵是为了防止重复计算。这个题目是有向图,复杂了一些,方法二:双向队列模拟。原创 2023-06-08 16:40:36 · 586 阅读 · 0 评论