摘要:
题目链接 95. 不同的二叉搜索树 II 思路分析 这个题要求我们把树建模出来,那么我们只好对1-n这些数字一个一个进行二叉搜索树建模。 我们利用二叉搜索树的特性,左子树小于根节点、右子树大于根节点的特性进行建立。我们最外围使用1-n中的每一个数字作为根节点,然后递归生成其左子树和右子树。 但是在做 阅读全文
摘要:
题目链接 167. 两数之和 II - 输入有序数组 题目分析 非常简单的一个题目,因为给定的是一个有序数组,我们可以直接使用双指针思想去寻找两个目标元素。如果num[left] + num[right]==target 就保存循环结果然后退出循环,否则就看大小移动left或者right指针。 其实 阅读全文
摘要:
题目链接 97. 交错字符串 题目分析 字符串题目,一般不考虑暴力解法,因为极有可能会出现超时的情况(主要是重复搜索次数太多 这个题很明显的就是需要我们使用动态规划去做,一开始我自己也懵逼了,三串的DP?难不成要一个三维状态数组吗,但是仔细分析了一下好像其实并不是的。 因为我们s1的长度加s2的长度 阅读全文
摘要:
题目链接 35. 搜索插入位置 题目分析 没啥好分析的,简单题,有序数组找插入位置,很明显的一个二分查找提示,我们直接利用二分模板进行查找就行,注意下边界问题。 代码实现 class Solution { public int searchInsert(int[] nums, int target) 阅读全文
摘要:
题目链接 120. 三角形最小路径和 题目分析 这个题要求我们在一个形状类似三角形的二维数组中寻找一条最短的路径,那么这个题暴力用bfs做是绝对会TLE的,所以只能用记忆化的方式。 对于记忆化的方式也有两种,第一种是自顶向下,第二种是自底向上。感觉DP就是怎么顺手怎么写就行了。 实现思路1 我们先开 阅读全文
摘要:
题目链接 350. 两个数组的交集 II 题目分析 这个题目要求我们求两个数组的交集,那么我们最简单的思想就是利用map去做一个缓存,然后针对另外一个数组,去检查缓存中是否有这个数,并且这个数出现的次数要大于0,如果大于0,就纳入到交集中。 第二种思想就是对两个数组进行预处理,把无序变成有序,然后利 阅读全文
摘要:
题目链接 174. 地下城游戏 题目分析 今天做题翻车了,从左上角往右下走考虑的cases好多,直接没做出来翻车。后来看了评论区才得出下面的答案。。 我们从右下角开始做会比较容易理解了,dp[i][j]代表进入dungeon[i][j]的地方需要的最小生命值。 我们这个最小生命值其实取决于其(右侧和 阅读全文
摘要:
题目链接 315. 计算右侧小于当前元素的个数 题目分析 这个题让我们统计nums[i]的右边比nums[i]小的数字的个数。第一眼看我直接就暴力解了,解到15个测试用例TLE了,所以换思想。 留意到题目的tag带有二分查找,排序。我开始注意在我们暴力解的过程中,我们每次都需要在i+1 ~ nums 阅读全文
摘要:
题目链接 309. 最佳买卖股票时机含冷冻期 题目分析 非常经典的股票买卖问题了,股票一共有两种状态:天数和持有或者不持有。我们只需要处理好base cases就可以顺着推下去做了。这里要注意它含有1天的冷却期,那么我们在处理持有股票的时候要注意,买入股票必须要在前天不持有股票的情况下进行了~ 代码 阅读全文
摘要:
题目链接 面试题 17.13. 恢复空格 题目分析 这个题是非常明显的区间DP问题,我们使用两个for循环就可以解决问题。第一重for循环用于定位sentence中每个字符的位置,第二重循环用于定位其长度。 但是在做的时候,我第二轮循环是从1开始一直找到当前字符的位置,这样会导致超时问题,只通过了6 阅读全文