LeetCode
cccc楚染rrrr
小菜鸡一枚TAT
展开
-
Leetcode150二刷总结
题号:3、209、76leftrightrightleft。原创 2024-03-03 22:02:01 · 456 阅读 · 0 评论 -
美团3月9日笔试题
注意注释的所有内容!注意ACM模式答案要打印输出,不要return。第四题:小美的朋友关系 3/30。第一题:小美的平衡矩阵。第二题:小美的数组询问。第五题:小美的区间删除。原创 2024-03-15 22:42:31 · 384 阅读 · 0 评论 -
912. 排序数组(堆排序)
从nums.length/2-1的元素开始向前遍历,调整每个元素作为堆顶元素的堆。原创 2024-03-01 22:08:48 · 175 阅读 · 0 评论 -
912. 排序数组(快速排序)
设定pointer作为最终要返回的pos,实际代表的是pivot的位置,其左边元素均小于pivot,右边元素均大于pivot。于是对区间内元素进行遍历,如果小于pivot,将其放在pointer的位置,并将pointer+1。找到pivot(两个方法:1. 取第一个值;2. 取随机值),并。遍历结束后,将pivot放到pointer它应该在的位置。返回pointer(即pos)重点:partition。原创 2024-03-01 21:40:08 · 172 阅读 · 0 评论 -
76. 最小覆盖子串(滑动窗口)
中每个元素的所需个数。来判断是否已经完全覆盖。有可能小于0,这表示。原创 2024-02-26 22:00:28 · 162 阅读 · 0 评论 -
3. 无重复字符的最长子串(滑动窗口)
滑动窗口,其实可以等价成一个队列,代码实现的时候可以直接用两个指针来规范。判断字符是否已经出现过,用哈希表。原创 2023-12-17 15:55:46 · 912 阅读 · 0 评论 -
209. 长度最小的子数组(滑动窗口)
我们把数组中的元素不停的入队,直到总和大于等于 s 为止,接着记录下队列中元素的个数,然后再不停的出队,直到队列中元素的和小于 s 为止(如果不小于 s,也要记录下队列中元素的个数,这个个数其实就是不小于 s 的连续子数组长度,我们要记录最小的即可)。接着再把数组中的元素添加到队列中……重复上面的操作,直到数组中的元素全部使用完为止。使用队列相加(实际上我们也可以把它称作是滑动窗口,这里的队列其实就相当于一个窗口)在代码中我们不直接使用队列,我们使用两个指针,一个指向队头一个指向队尾。原创 2023-12-17 15:18:59 · 405 阅读 · 0 评论 -
221. 最大正方形(动态规划)
【代码】221. 最大正方形(动态规划)原创 2024-02-01 11:21:12 · 248 阅读 · 1 评论 -
72. 编辑距离(多维动态规划)
根据目前的经验来看,针对于两个字符串相关问题使用多维动态规划的解决方法,通常要设置。注意:由于存在字符串为空的情况,于是我们设置。原创 2024-01-31 11:18:00 · 390 阅读 · 0 评论 -
97. 交错字符串(多维动态规划)
注意:下标索引和dp数组索引的差异。原创 2024-01-31 10:27:59 · 353 阅读 · 0 评论 -
5. 最长回文子串(多维动态规划)
【代码】5. 最长回文子串。原创 2024-01-30 21:31:18 · 245 阅读 · 0 评论 -
63. 不同路径 II(多维动态规划)
【代码】63. 不同路径 II。原创 2024-01-30 11:20:37 · 407 阅读 · 0 评论 -
123. 买卖股票的最佳时机 III(多维动态规划)
【代码】123. 买卖股票的最佳时机 III(动态规划)原创 2024-02-01 10:32:52 · 452 阅读 · 0 评论 -
64. 最小路径和(多维动态规划)
【代码】64. 最小路径和。原创 2024-01-30 10:32:05 · 159 阅读 · 0 评论 -
188. 买卖股票的最佳时机 IV(动态规划)
注意:在初始化的时候,遍历奇数位状态不能在for循环的判断语句中判断,因为不符合条件会直接跳出循环导致初始化失败,应该在自增操作中进行约束。次交易,只需要将状态扩展到。即可,其余操作都是一样的。III 中要求是最多。次交易,本题中是最多。原创 2024-02-01 10:54:11 · 259 阅读 · 0 评论 -
120. 三角形最小路径和(多维动态规划)
这道题中,除了第一行,其余行中元素路径值由上面元素的最小值加和决定,最终。原创 2024-01-30 09:37:03 · 248 阅读 · 0 评论 -
300. 最长递增子序列(动态规划)
【代码】300. 最长递增子序列(动态规划)原创 2024-01-27 11:51:39 · 365 阅读 · 0 评论 -
139. 单词拆分(动态规划)
字典相当于物品,字符串相当于背包,从物品里挑选若干物品放在背包中,使背包填满,物品可以装进去不止一次。这道题可以看作一个背包问题(方便理解)原创 2024-01-26 21:46:17 · 172 阅读 · 0 评论 -
322. 零钱兑换(动态规划+背包问题)
【代码】322. 零钱兑换(动态规划+背包问题)原创 2024-01-26 22:31:49 · 225 阅读 · 0 评论 -
198. 打家劫舍(动态规划)
参考题解:https://leetcode.cn/problems/house-robber/solutions/138131/dong-tai-gui-hua-jie-ti-si-bu-zou-xiang-jie-cjavap。第一次使用dfs超时了。原创 2024-01-26 20:49:59 · 203 阅读 · 0 评论 -
70. 爬楼梯(动态规划dp)
但是直接递归会超时,因此进行状态空间的压缩:滑动窗口。原创 2024-01-25 20:58:51 · 226 阅读 · 0 评论 -
149. 直线上最多的点数
链接:https://leetcode.cn/problems/max-points-on-a-line/solutions/842391/gong-shui-san-xie-liang-chong-mei-ju-zhi-u44s/来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。三个点构成的两条线斜率是否相等来判断是否在同一直线上。其中斜率判断由除法变为乘法计算。当只有一个节点的时候答案为1。原创 2024-01-25 20:10:18 · 169 阅读 · 0 评论 -
50. Pow(x, n)
从右往左开始递归计算,假设。原创 2024-01-25 19:54:35 · 123 阅读 · 0 评论 -
69. x 的平方根
注意: 由于计算机无法存储浮点数的精确值(浮点数的存储方法可以参考 IEEE 754,这里不再赘述),而指数函数和对数函数的参数和返回值均为浮点数,因此运算过程中会存在误差。链接:https://leetcode.cn/problems/sqrtx/solutions/238553/x-de-ping-fang-gen-by-leetcode-solution/我的做法:除了0和1之外,遍历从1到x/2的值寻找答案,注意平方和后有可能超出int的上界,此时需要转换为long类型,但是又超时了。原创 2024-01-25 19:40:49 · 290 阅读 · 0 评论 -
172. 阶乘后的零
而质因数为2会每两次出现一次,质因数为5会每五次出现一次,因此我们只需要统计出现质因数为5的情况。我的做法:(错误)直接找余5得0得数。而能凑出0的只能是10,而10又等于。实际上应该找存在多少个为5质因数。,所以我们找可以出现多少对。原创 2024-01-25 17:28:00 · 330 阅读 · 0 评论 -
66. 加一
的这种情况,只需要重新建立一个长度加一的数组,首位为1,其余位置无需改变(默认为0)即可。但是有冗余步骤,比如在遍历每一位时,如果没有再向前进位,则直接。我的做法:就是普通的模拟遍历。原创 2024-01-25 17:12:39 · 368 阅读 · 0 评论 -
9. 回文数
的一半,注意特殊情况的判断(复数和个位为。将其转换为字符串,字符串翻转后相同则。原创 2024-01-24 20:18:39 · 328 阅读 · 0 评论 -
201. 数字范围按位与
根据题意,相当于我们要找到这个区间内所有数字的公共前缀,那么依次将其右移一位,循环比较并记录移动位数,直到相等,那么此时的数字左移之前移动次数得到的就是公共前缀的结果,也是这些数字与操作后得到的结果。原创 2024-01-23 21:01:43 · 337 阅读 · 0 评论 -
137. 只出现一次的数字 II(位运算)
位的结果(0或1),因为出现3次的数字加和后的结果(0+0+0或1+1+1)余3的结果都是0,因此,这就确定了出现1次的数字的第。位数字(0或1),统计其和,和余3的结果应该就是0或1,这取决于出现1次的那个数字在第。中的每个数字都是32位内数字,那么从0-31位依次判断。位,0-31位依次这样判断,最终就可以得到结果。个数位,然后将其和1做与操作,得到第。(相当于从右向左,依次取出。的基础上进行或操作,把1左移。位,相当于舍弃掉右边。原创 2024-01-23 20:53:50 · 351 阅读 · 0 评论 -
136. 只出现一次的数字(异或操作:统计数字次数)
统计每个数字出现的个数,当数字第一次出现会在其对应位置标1,第二次出现时,由于异或操作,会将原来位置的1变成0,于是最后保留下来的仅仅是出现过一次的数字,即答案。原创 2024-01-23 20:22:58 · 314 阅读 · 0 评论 -
191. 位1的个数
主要记住怎么遍历取出。原创 2024-01-23 20:00:33 · 319 阅读 · 0 评论 -
190. 颠倒二进制位
从右往左将无符号32位数n开始遍历,每取出来一个数,将其放在ans的左边。会在左边添加1,以保持负数的符号不变。这意味着负数右移后会保持为负数。而放在ans的左边,则通过将取到的数进行左移,左移。这意味着负数右移后会变成正数。(无符号右移):无论操作数是正数还是负数,举个例子,假设有一个32位的负数。(带符号右移):对于正数,进行右移一位,结果为。进行右移一位,结果为。会保持负数的符号,而。原创 2024-01-23 19:56:46 · 352 阅读 · 0 评论 -
67. 二进制求和
它没有添加额外的同步开销,因此在单线程环境中通常是更好的选择。都是用于处理字符串的类,它们的主要区别在于线程安全性和性能。因此,如果在多线程环境下需要线程安全的字符串操作,应该使用。的方法而不会产生不一致的结果。这是通过在每个方法上添加。存储计算后的结果,计算数字可以通过和字符0相减得到。而在单线程环境下,为了获得更好的性能,可以选择。是线程安全的,这意味着多个线程可以同时调用。的性能可能会受到影响,特别是在多线程环境下。不是线程安全的,因此在单线程环境中通常比。原创 2024-01-23 14:57:11 · 333 阅读 · 0 评论 -
502. IPO(贪心算法+优先队列/堆)
在Java中,优先队列(PriorityQueue)是一种特殊的队列,它可以确保队列中元素的顺序是按照它们的优先级进行排列的数据结构。在优先队列中,具有较高优先级的元素会先被处理,而具有较低优先级的元素会被放置在队列的尾部。每次选择完一个业务,可用资金都会变动,这是可选择的业务也会变化,因此每次将可选择的业务放在一个优先队列(大顶堆)中,堆顶元素就是目标业务。中,当传入比较器时,它将根据比较器所定义的规则对集合中的元素进行排序。整体思想:在满足可用资金的情况下,选择其中利润最大的业务,直到选到。原创 2024-01-22 20:21:34 · 1255 阅读 · 0 评论 -
215. 数组中的第K个最大元素(快速排序)
然后对哨兵两边的子数组再进行快速排序。来定哨兵可以防止特定数列使算法退化。不符合题意:时间复杂度为。原创 2024-01-22 17:46:15 · 366 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数
【代码】4. 寻找两个正序数组的中位数。原创 2024-01-22 17:15:28 · 592 阅读 · 0 评论 -
153. 寻找旋转排序数组中的最小值
旋转后的数组分为两部分,因此可以用二分查找,找到第一个比。原创 2024-01-22 16:36:47 · 737 阅读 · 0 评论 -
34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)
之前提到过二分查找不仅可找到相等的数值,更关键的是。问题在于:找左右坐标的时候时间复杂度不是。二分查找到目标值然后左右找到坐标。,因此我们可以借助这个性质找到。原创 2024-01-20 11:19:19 · 380 阅读 · 0 评论 -
33. 搜索旋转排序数组
链接:https://leetcode.cn/problems/search-in-rotated-sorted-array/solutions/577298/shua-chuan-lc-yan-ge-ologn100yi-qi-kan-q-xifo/ 来源:力扣(LeetCode) 著作权归作者所有。「二分」不是单纯指从有序数组中快速找某个数,这只是「二分」的一个应用。在翻转位置的左边区间还是右边区间,最后对其二分查找即可。「二分」的本质是两段性,并非单调性。原创 2024-01-17 21:52:06 · 346 阅读 · 0 评论 -
162. 寻找峰值
但是如果你往上坡方向走,就算最后一直上的边界,由于最边界是负无穷,所以就一定能找到山峰。如果你往下坡方向走,也许可能遇到新的山峰,但是也许是一个一直下降的坡,最后到边界。想了很多,二分查找的方向是对的,但是条件想得过于复杂了,另外对于二分查找的。,那么就不用担心边界单调递增的情况了,因为总有负无穷兜底。单调栈小题大做,且复杂度为O(n)不符合题意。原创 2023-12-18 19:06:49 · 325 阅读 · 0 评论