力扣hot100——子串、普通数组、矩阵

第二次刷题不在idea写代码,而是直接在leetcode网站上写,"逼"自己掌握常用的函数。

标志 掌握程度 解释 办法
Fully 完全掌握 看到题目就有思路,编程也很流利
⭐⭐ Basically 基本掌握 需要稍作思考,或者看到提示方法后能解答
⭐⭐⭐ Slightly 稍微掌握 需要看之前写过的代码才能想起怎么做 多做
⭐⭐⭐⭐ absolutely no 完全没有掌握 需要看题解才知道怎么做
⭐⭐⭐⭐⭐ 有难度的高频题 需要看题解才知道怎么做,而且过几天就忘了这道题怎么做了 背背
10 ⭐⭐⭐ Medium 子串 560/和为K的子数组 前缀和法 定义 si+1 = nums0 + nums1 + ... + numsi; 下标从 i 到 j - 1 的非空连续子数组的元素和等于 k, 则 sj - si = k ==> si = sj - k 哈希表键值分别保存sj的值及其出现的次数,要注意加这句话初始化map.put(0, 1); 遍历数组,每次遍历都查找哈希表中是否包含sj - k
11 ★★★★ Hard 子串 239/滑动窗口最大值 维护一个单调递减队列,注意队列中保存的值并不是元素的值,而是元素的数组下标,保持队头的元素是最大的。 遍历数组 如果当前遍历元素大于等于队尾元素,则将队尾元素移除,直到当前遍历元素小于队尾元素,则将当前遍历元素存入队尾 如果队头元素不在当前窗口则移除,每遍历完k个元素,将左边界元素移除 实现Deque接口的有两个类,一个是LinkedList类,另一个是ArrayDeque类。 但是在实现类的选择上,一般都是选择ArrayDeque类。 总结:在需要List的时候,用ArrayList实现;在需要Stack、Queue、Deque时,用ArrayDeque实现。
12 ★★★★ Hard 子串 76/最小覆盖字串 使用两个大小为128的数组来保存目标字符串 和 当前遍历子串中的字符数 初始化最短左右边界为 -1 和 n 定义左右指针来遍历数组 将右指针的字符更新到数组中,调用函数检查 两个数组 是否覆盖 如果没有覆盖,右指针右移 如果覆盖了(注意这里是while循环),则更新最短的左右边界。如果左指针小于右指针的情况下(这里是if条件),左指针右移 最后返回最短左右边界的子串,注意这里要判断最短左右边界是不是最开始的那个 s.substring(ansLeft, ansRight + 1)
13 ★★ Medium 普通数组 53/最大子数组和 遍历数组 当前和 加上 当前遍历数,并更新答案(取较大) 如果当前和 小于等于 0,说明对后面的和只会产生负面影响,所以将当前和更新为0,重新计和
14 ⭐⭐⭐ Medium 普通数组 56/合并区间 先将数组按照每个区间的左边界进行排序,然后遍历数组 用left 和 right保存当前左右边界 如果当前遍历区间的左边界小于当前右边界,则将右边界更新为 当前遍历区间的右边界 和 当前右边界的较大值 否则将当前的左右边界存入答案,并更新左右边界为当前遍历区间的左右边界 Arrays.sort(intervals, (a, b) -> Integer.compare(a0, b0)); ans.add(new int\[\]{left, right}); ans.toArray(new intans.size()\[\]);
15 ⭐⭐⭐ Medium 普通数组 189/轮转数组 需要翻转三次数组, 第一次翻转整个数组, 第二次、第三次分别反转 k % n 之前的数组 和 k % n 之后的数组 nums = "----->-->"; k =3 result = "-->----->"; reverse "----->-->" we can get "<--<-----" reverse "<--" we can get "--><-----" reverse "<-----" we can get "-->----->"
16 Medium 普通数组 238/除自身以外数组的乘积 O(N)时间复杂度,O(1)空间复杂度 遍历数组,建立一个ansi数组来保存,numsi之前的数乘积和 再次从后往前遍历数组,用一个变量来保存后缀和,每次遍历用 ansi * r 即为答案
17 ★★★★ Hard 普通数组 41/缺失的第一个正数 要求O(1)空间复杂度,将原数组nums构造成一个哈希表(重点是怎么构造这个哈希表) 映射规则,把 值为1 的元素 映射到 位置为0,把 值为2 的元素 映射到 位置为1 遍历数组,在1,n范围内的值 如果它不在对应的位置 就将它和正确位置上的元素交换位置 重点:不是 numsi - 1 != i, 而是numsnums\[i - 1] != numsi,因为numsnums\[i - 1] == numsi时,不需要交换,否则就进入死循环了 再次遍历数组,遇到的第一个 值 和 位置不匹配的元素即为答案
18 ⭐⭐⭐ Medium 矩阵 73/矩阵置零 要求O(1)空间复杂度 ,使用两个额外变量记录第一行第一列出现0的情况,其他行列出现0的情况记录在原数组的第一行第一列。 这道题有易错点,在填0的时候,索引 I 和 j 一定从 1 开始,而不是从 0 开始
19 ⭐⭐⭐ Medium 矩阵 54/螺旋矩阵 这道题很容易出错 遍历元素次数times从0开始一直到 < m*n,易错点:注意每次循环要加上 times < m * n的条件 从左到右循环遍历 从上到下循环遍历 从右到左循环遍历 从下到上循环遍历 每次循环的同时times++,循环完成后更新边界
20 ⭐⭐⭐ Medium 矩阵 48/旋转图像 要求O(1)空间复杂度,先转置(注意只要遍历右上角或者左上角即可),再翻转每一行的元素(注意遍历每行的一半即可)
21 Medium 矩阵 240/搜索二维矩阵II 从右上角开始遍历矩阵 如果大于 target 就 向左寻找 如果小于 target 就 向下寻找

图片版:

相关推荐
葫芦和十三7 小时前
图解 MongoDB 07|索引类型:七种索引,七种访问形状
后端·mongodb·agent
朦胧之8 小时前
AI 编程-老项目改造篇
java·前端·后端
swipe11 小时前
从 0 到 1 实现大文件上传:分片、秒传、断点续传、暂停、重试与服务端合并
前端·javascript·面试
爱勇宝11 小时前
我做了一个只用来搜歌词的小 App
android·前端·后端
IT_陈寒12 小时前
SpringBoot自动配置坑了我一晚上,原来问题出在这
前端·人工智能·后端
SelectDB13 小时前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
SelectDB13 小时前
秒级弹性、最高降本 70%:SelectDB Serverless 如何重塑云数仓资源效率
大数据·后端·云原生
kisshyshy13 小时前
🍦 雪糕、食堂、火车厢:三幅漫画吃透栈、队列与链表
javascript·算法
程序猿大帅13 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
PinkSun13 小时前
Spring AI ChatMemory踩坑实录:重启丢数据、Agent丢记忆、对话溢出
后端·ai编程