随笔分类 - LeetCode每日一题
LeetCode每日一题
摘要:题目链接 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
阅读全文
摘要:题目链接 63. 不同路径 II 题目分析 非常典型的一个DP问题。我们采用一个二维dp数组,dp[i][j]的意思是从0,0出发到obs[i][j]的路径和有多少条,注意边界值就行。 状态转移方程如下: if(obs[i][j] == 0) dp[i][j] = dp[i-1][j] + dp[i
阅读全文
摘要:题目链接 44. 通配符匹配 思路分析 这个题在LC上属于hard类型,其实还是归结到了DP问题上。这个DP跟另外一题10. 正则表达式匹配有点像,但是这个题我个人来说做起来比正则表达式要简单很多。 这个题中,s和p都有可能为空,那么我们要先做个base cases。当两个字符串都为空的时候,直接返
阅读全文
摘要:题目链接 108. 将有序数组转换为二叉搜索树 思路分析 这个题要求我们将一个升序的数组转变成二叉搜索树,那么其实思路很容易了,就是使用二分的方法,把数组中的中间位置的数据作为当前树的根节点,它的左边的数成为它的左子树,右边的数成为它的右子树。 代码实现 /** * Definition for a
阅读全文
摘要:题目链接 718. 最长重复子数组 题目分析 这个题很明显的DP问题,而且七月份的每日一题都是以DP为主,很好~~ 但是在这个DP问题上,我又搞砸了,把子数组和子序列搞混了,对于一般的题目来说,子序列默认不连续,子数组默认连续。 具体来到DP问题的转移方程来说,对于子序列问题,当判断的两个字符不相等
阅读全文
摘要:题目链接 215. 数组中的第K个最大元素 题目思路 这个题最容易的思想就是先进行排序,排序完从后往前数k位即可。这个时间复杂度为O(nlogn),但是我们其实没必要对整个数组进行完全的排序。 第二种方法的有化解有优先队列(大顶堆),我们维护大小为k的大顶堆,然后遍历完整个数组之后,我们的大顶堆中存
阅读全文
摘要:题目链接 209. 长度最小的子数组 题目分析 这个题要我们求一个子数组,子数组意味着连续,而且这个题的数字全部都是正整数,刚好满足滑动窗口的条件,毫不犹豫就死命滑就完事了。 实现代码 class Solution { public int minSubArrayLen(int s, int[] n
阅读全文
摘要:题目链接 41. 缺失的第一个正数 题目分析 这个题如果没有下面的要求的话简直就是白给,直接一个map扫一次数组或者排序就行。 但是它这个既然提到了,我们还是得按照别人的要求做。 我们在剑指Offer里面有一题的思想和这里差不多,就是将满足要求的数放置到对应的下标上,由于题目是正整数,我们的数值应该
阅读全文
摘要:题目链接 面试题 02.01. 移除重复节点 思路分析 原题 这个题其实很简单,我们拿一个缓冲区去记录出现过的数字就可以了。如果缓冲区中有当前结点的值的话,我们直接跳到下一个,否则我们就把当前结点纳入到缓冲区中,并且使上一个结点的next指针指向当前结点,当然还要把当前结点的next指针指向空。 这
阅读全文
摘要:题目链接 139. 单词拆分 题目分析 这个题要求我们去检查s是否能拆分成字典集合中的单词,其中字典集中可以把重复出现的单词看做一个。 我们仔细看第三个测试用例,可以发现他说的拆分就是你一个字母不能同时属于两个新单词。 这个题第一次做不会,后来看了题析才知道是DP问题,今天这个题作为每日一题, 自然
阅读全文
摘要:题目地址 16. 最接近的三数之和 题目分析 这个题和三数之和很相似,所以我采用了相同的做法,先进行排序,每次固定左手边的值。然后使用双指针从左边和右边寻找三数之和最接近target的值,这样做的效率有点差,两个月过去了水平还没啥提升,我醉了。 实现代码 class Solution { publi
阅读全文
摘要:67. 二进制求和 题目分析 这个题很明显就是对字符串的每一个位进行操作,思想也很简单啊,主要还是考验代码风格吧。 我们只需要从右到左每个位进行判断,然后填入新的字符串中,最后进行返回即可。 实现代码 class Solution { public String addBinary(String a
阅读全文

浙公网安备 33010602011771号