随笔分类 - leetcode题解
力扣题解
摘要:[41. 缺失的第一个正数](https://leetcode.cn/problems/first-missing-positive/) ## 方法:原地哈希 ### 解题思路 - 原地哈希:在原来的数组基础上构建哈希表,不占用额外的空间 - 在本题中,设数组大小为 $n$; - 若从 $[1, n
阅读全文
摘要:[40. 组合总和 II](https://leetcode.cn/problems/combination-sum-ii/) ## 方法:回溯 ### 解题思路 - 如何去重? - 答:对相同的元素进行统一的处理,即枚举当前操作选几个该元素。 ### 代码 ```cpp class Solutio
阅读全文
摘要:[2569. 更新数组后处理求和查询](https://leetcode.cn/problems/handling-sum-queries-after-update/) ## 方法:线段树 ### 前置知识 **线段树:** [线段树 - 多组图带你从头到尾彻底理解线段树](https://www.
阅读全文
摘要:题目链接:[1177. 构建回文串检测](https://leetcode.cn/problems/can-make-palindrome-from-substring/) ## 方法:状态压缩 + 前缀异或 ### 解题思路 - 由题可知对于询问 $queries[i] = [l, r, k]$,
阅读全文
摘要:题目链接:[剑指 Offer II 048. 序列化与反序列化二叉树](https://leetcode.cn/problems/h54YBf/) ## 方法:先序遍历(dfs) ### 解题思路 在先序遍历过程中,节点值之间通过空格隔开,好利于后续反序列化过程中获取值。 ### 代码 ```cpp
阅读全文
摘要:题目链接:[2517. 礼盒的最大甜蜜度](https://leetcode.cn/problems/maximum-tastiness-of-candy-basket/) ## 方法:二分 ### 解题思路 - 题目意思:当前有 $n$ 类糖果,从 $0$ 到 $n - 1$ 编号,$price[
阅读全文
摘要:题目链接:[1130. 叶值的最小代价生成树](https://leetcode.cn/problems/minimum-cost-tree-from-leaf-values/) ## 方法:dp ### 解题思路 - 状态表示 - 集合:$dp[i][j]$ 表示子数组 $[i, j]$ 能构成的
阅读全文
摘要:题目链接:[剑指 Offer II 039. 直方图最大矩形面积](https://leetcode.cn/problems/0ynMMM/) ## 方法:单调栈 ### 解题思路 - 以直方图中的某一条为高的最大(面积)矩形的宽度为 $r - l + 1$,其中 $r$ 表示在其右边第一个小于(或
阅读全文
摘要:题目链接:[1079. 活字印刷](https://leetcode.cn/problems/letter-tile-possibilities/) ## 方法:计数 + 回溯 ### 解题思路 先统计字符串中每种字符的个数 `cnt[26]{}`,对于每一层统计本层的节点,对应一种字符序列,再加上
阅读全文
摘要:题目链接:2654. 使数组所有元素变成 1 的最少操作次数 方法一:计算最短的gcd为1的子数组 解题思路 本题目标:使得所有的数组元素都变为 $1$,通过求相邻元素 $gcd$ 将其赋值给一方的方式; 思路: 若想操作数最少,那么就是不为 $1$ 的数 $x$ 和 1 求 $gcd$,即 $x
阅读全文
摘要:题目链接:1016. 子串能表示从 1 到 N 数字的二进制串 方法:思维 解题思路 由题目可知,字符串 $s$ 的最大长度为 $1000$,那么其最多能表示的不同的二进制数不超过 $1000$ 个。因此当 $n > 1000$ 时,直接返回 $false$;否则遍历 $[1, n]$ 判断是否符合
阅读全文
摘要:题目链接:1263. 推箱子 方法:双端队列 + BFS 解题思路 [Python3/Java/C++/Go/TypeScript] 一题一解:双端队列 BFS(清晰题解) 代码 class Solution { public: int minPushBox(vector<vector<char>>
阅读全文
摘要:题目链接:2106. 摘水果 方法:滑动窗口 解题思路 从 $startPos$ 所能到达的最左端 $(>= startPos - k)$ 的位置 $left$ 开始,初始化右指针 $right = left$,$right$ 右移至 $startPos$,因为不知道继续右移能不能到达; 当右移超过
阅读全文
摘要:题目链接:剑指 Offer II 022. 链表中环的入口节点 方法一:哈希 解题思路 统计走过的节点,当第一次遇到重复的节点时,即为入口节点,否则为 $null$。 代码 class Solution { public: ListNode *detectCycle(ListNode *head)
阅读全文
摘要:题目链接:剑指 Offer II 020. 回文子字符串的个数 方法一:动态规划 解题思路 状态表示:$dp[i][j]$ 表示子字符串 $s[i,j]$ 是否为回文串; 状态计算: 若 $s[i]$ != $s[j]$,显然不是; 若 $s[i]$ == $s[j]$,有以下几种可能: $i$ =
阅读全文
摘要:题目链接:1031. 两个非重叠子数组的最大和 方法:前缀和 + 哈兮 解题思路 考虑暴力解法,枚举以 $i$ 结尾的长度为 $firstLen$ 的子数组,求 $[i + 1, n - 1]$ 中长度为 $secondLen$ 长度的子数组和的最大值,最后取两者和的最大值; 优化:前缀和 + 哈兮
阅读全文
摘要:题目链接:剑指 Offer II 017. 含有所有字符的最短字符串 方法:同向双指针 解题思路 基本思路:统计 $t$ 字符串中每个字符的个数,然后使用双指针遍历字符串 $s$,当窗口覆盖 $t$ 中所有字符时,开始缩短左指针到可以到达的最右侧,取窗口最小的字符串为答案; 需要考虑的问题: 什么情
阅读全文
摘要:题目链接:1163. 按字典序排在最后的子串 方法:双指针 解题思路 【正常走路我不走,就是跳,就是玩】 任何非后缀子串字典序都小于其相应的后缀子串,如 $s[i, i + k] < s[i, n - 1]$, $k < n - 1$,故答案一定为后缀子串,即 $s[i, n - 1]$; 观察数据
阅读全文
摘要:题目链接:1105. 填充书架 方法一:记忆化搜索 解题思路 $dfs(i)$:从 $i$ 到 $n - 1$ 书放置的最小高度总和; 对于每一层:枚举当前层放置从 $i$ 开始的书,放置几本时整体的高度最优,按题目要求,必须是从 $i$ 开始的连续几本书,当前层的高度取最优方案中书的最高值; 返回
阅读全文
摘要:题目链接:6392. 使数组所有元素变成 1 的最少操作次数 方法一:计算最短的gcd为1的子数组 解题思路 本题目标:使得所有的数组元素都变为 $1$,通过求相邻元素 $gcd$ 将其赋值给一方的方式; 思路: 若想操作数最少,那么就是不为 $1$ 的数 $x$ 和 1 求 $gcd$,即 $x
阅读全文

浙公网安备 33010602011771号