随笔分类 - leetcode中等题
摘要:链接 https://leetcode.cn/problems/house-robber/description/ 思路 相邻的要么选,要么不选。 设置dp[i]表示以nums[i]为结尾的序列的最大收益。所以状态转移方程为:dp[i] = max(dp[i-1], dp[i-2]+nums[i])
阅读全文
摘要:链接 https://leetcode.cn/problems/longest-increasing-subsequence/description/ 思路 经典DP题目。 我们用dp[i]代表了第i个元素为最终子序列长度的最长递增子序列的长度。 总体思想就是,对于某个子序列i,去遍历它前面的dp[
阅读全文
摘要:链接 https://leetcode.cn/problems/maximum-subarray/description/ 思路 1. 在线处理法:对于一个连续的序列来说,如果它小于0,那么它对于周围所有的数组都是减益效果。试想一下,任何数与负数相加,都小于它本身。根据此,可以用在线处理法,O(n)
阅读全文
摘要:链接 https://leetcode.cn/problems/jump-game-ii/description/ 思路 最基本的思路,能到达某结点的跳跃方式中,最左边的那个结点是最优的;换句话说,到达左边的结点比到达右边的结点更容易。 所以我们可以写代码模拟,每次都求能达到target_index
阅读全文
摘要:链接 https://leetcode.cn/problems/generate-parentheses/description/ 分析 这个题目是让生成有效的括号组合,首先我们搞明白一个问题,什么叫有效的括号? 1. 所有的括号都能找到有效的闭合。 基于此,我们可以认为:左括号数等于右括号数,且从
阅读全文
摘要:链接 https://leetcode.cn/problems/number-of-islands/description/ 思路 跟岛屿周长差不多...但我觉得这个比岛屿周长还简单。不知道为什么这个算中等题目,岛屿周长算简单题目 代码 class Solution: def numIslands(
阅读全文
摘要:链接 https://leetcode.cn/problems/sum-root-to-leaf-numbers/description/ 思路 时刻记住,DFS是递归的一种。而解决递归,最朴素的思路就是:递归的定义就是递归的解。 题目要求我们求根节点到叶子结点的和,我们要提供一个值保持其状态,退出
阅读全文
摘要:链接 https://leetcode.cn/problems/next-greater-element-ii/description/ 思路 我在单调栈这块是真的不会......稍微一变就想不明白了, 得找个时间攻克一下 这个题目,我能想到的办法就是把数组拉长到2倍(模拟循环数组),然后对其进行单
阅读全文
摘要:链接 https://leetcode.cn/problems/132-pattern/description/ 思路 这题其实不难,就是边界条件难想。 我们可以先保证单调栈里是逆序,然后判断单调栈中较小的值是否大于当前元素(满足132的1和2的关系)。 代码 class Solution: def
阅读全文
摘要:链接 https://leetcode.cn/problems/remove-k-digits/description/ 思路 这个题目要求移除k位后,剩下的数字最小。既然剩下的数字最小,那就牵扯到了类似于“字典序”这样一个概念。这样的题目是适合用单调栈来进行解决的。 依然是单调栈的三板斧: 1.
阅读全文
摘要:链接 https://leetcode.cn/problems/remove-duplicate-letters/description/ 思路 这个题并不是传统的单调栈,所以硬套单调栈会懵逼。 什么时候用单调栈? 这个题目要求去除重复字母,还要保持字典序。 注意,跟相对顺序相关的题目,如:其后比他
阅读全文
摘要:问题描述 https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/ 解题思路 这个题目,用一个数组就能很好的解决。但空间复杂度是O(n). 题目中给的进阶要求,是要空间复杂度为O(1),所以这就要求我们在
阅读全文
摘要:问题描述 https://leetcode.cn/problems/path-sum-ii/description/ 解题思路 首先,我们设置一个容器存储最终的结果。 其次,我们在遍历过程中,更新数组。 然后,在叶子结点处判断是否加入。 代码 # Definition for a binary tr
阅读全文
摘要:问题描述 https://leetcode.cn/problems/recover-binary-search-tree/description/ 解题思路 二叉搜索树的中序遍历一定是一个有序的序列。 题目中说两个节点的值被交换了,即我们中序遍历得到的二叉搜索树是无序的,但交换两个节点即为有序。 所
阅读全文
摘要:问题描述 https://leetcode.cn/problems/validate-binary-search-tree/description/ 解题思路 二叉搜索树的性质是:root节点要大于左子树的最大值,小于右子树的最小值。 同时,对上层,也要更新本层的最大值和最小值以供继续递归。 补充:
阅读全文
摘要:问题描述 https://leetcode.cn/problems/longest-palindromic-substring/description/ 解题思路 如果一个字符串是回文串,那么它左边接上一个字符,右边接上一个字符,如果这两个字符相等,那这个长字符串必然是回文串。 所以,我们可以从原来
阅读全文
摘要:问题链接 https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 解题思路 这是一个长度不定的滑动窗口。 我们需要设置一个left指针和right指针,分别指向滑动窗口的左边界和右边界。 我们判定当前的滑动窗口是否满足题
阅读全文
摘要:问题描述 https://leetcode.cn/problems/repeated-dna-sequences/description/ 解题思路 这同样是一个滑动窗口的典型问题。 首先我们看一下数据规模,进行一下异常处理。 我们设置一个res用来存储最后的结果,一个se用来存储遍历过的字符串,方
阅读全文
摘要:问题链接 https://leetcode.cn/problems/find-minimum-in-rotated-sorted-array/description/ 解题思路 这个题目要求用logn的算法,那只能是二分了。 二分的时候,我们要讲究策略。首先,我们要找旋转数组中的最小值。我们先分析数
阅读全文
摘要:问题链接 https://leetcode.cn/problems/search-a-2d-matrix/description/ 解题思路 我们可以确定,数据是有序的。所以我们有2种办法用二分来解决。 第一种,我们可以写个下标映射函数,把矩阵当做一维数组来进行遍历。 第二种,我们可以先对列进行二分
阅读全文