
力扣
文章平均质量分 51
随遇而安ing
种一棵树最好的时间是十年前,其次是现在!
展开
-
【Java】力扣 76. 最小覆盖子串
【代码】【Java】力扣 76. 最小覆盖子串。原创 2022-10-27 20:00:00 · 951 阅读 · 0 评论 -
【力扣】322-零钱兑换
为什么 dp 数组中的值都初始化为 amount + 1 呢,因为凑成 amount 金额的硬币数最多只可能等于 amount(全用 1 元面值的硬币),所以初始化为 amount + 1 就相当于初始化为正无穷,便于后续取最小值。假设你有面值为 1, 2, 5 的硬币,你想求 amount = 11 时的最少硬币数(原问题),如果你知道凑出 amount = 10, 9, 6 的最少硬币数(子问题),你只需要把子问题的答案加一(再选一枚面值为 1, 2, 5 的硬币),求个最小值,就是原问题的答案。原创 2022-10-12 22:30:00 · 547 阅读 · 0 评论 -
【力扣】509-斐波那契数-多种优化解法
我们可以造一个「备忘录」,每次算出某个子问题的答案后别急着返回,先记到「备忘录」里再返回;每次遇到一个子问题先去「备忘录」里查一查,如果发现之前已经解决过这个问题了,直接把答案拿出来用,不要再耗时去计算了。根据斐波那契数列的状态转移方程,当前状态只和之前的两个状态有关,其实并不需要那么长的一个 DP table 来存储所有的状态,只要想办法存储之前的两个状态就行了。有了上一步「备忘录」的启发,我们可以把这个「备忘录」独立出来成为一张表,通常叫做 DP table,在这张表上完成「自底向上」的推算。原创 2022-10-12 22:00:00 · 199 阅读 · 0 评论 -
【JAVA】力扣-167-两数之和 II
数组有序,可以采用双指针技巧,通过调节 left 和 right 就可以调整 sum 的大小,从而求解。原创 2022-09-30 20:45:00 · 800 阅读 · 0 评论 -
【JAVA】力扣-26-删除有序数组中的重复项
这样,就保证了 nums[0…slow] 都是无重复的元素,当 fast 指针遍历完整个数组 nums 后,nums[0…slow] 就是整个数组去重之后的结果。由于数组已经排序,所以重复的元素一定连在一起,但如果毎找到一个重复元素就立即原地删除它,由于数组中删除元素涉及数据搬移,整个时间复杂度是会达到 O(N^2)。我们让慢指针 slow 走在后面,快指针 fast 走在前面探路,找到一个不重复的元素就赋值给 slow 并让 slow 前进一步。nums 已按 升序 排列。原创 2022-09-30 20:30:00 · 588 阅读 · 0 评论 -
【JAVA】-判断链表是否包含环
如果 fast 最终遇到空指针,说明链表中没有环;如果 fast 最终和 slow 相遇,那肯定是 fast 超过了 slow 一圈,说明链表中含有环。每当慢指针 slow 前进一步,快指针 fast 就前进两步。原创 2022-09-30 18:30:00 · 1320 阅读 · 0 评论 -
【JAVA】力扣-876-链表的中间结点
问题的关键也在于我们无法直接得到单链表的长度 n,常规方法也是先遍历链表计算 n,再遍历一次得到第 n / 2 个节点,也就是中间节点。每当慢指针 slow 前进一步,快指针 fast 就前进两步,这样,当 fast 走到链表末尾时,slow 就指向了链表中点。我们让两个指针 slow 和 fast 分别指向链表头结点 head。原创 2022-09-30 18:15:00 · 338 阅读 · 0 评论 -
【JAVA】力扣-19.删除链表的倒数第 N 个结点
【代码】【JAVA】力扣-19.删除链表的倒数第 N 个结点。原创 2022-09-29 22:30:00 · 249 阅读 · 0 评论 -
【JAVA】力扣-86-分隔链表
【代码】【力扣-分隔链表】原创 2022-09-29 19:45:00 · 201 阅读 · 0 评论 -
【JAVA】力扣-21-合并两个有序链表
【代码】【力扣-合并两个有序链表】原创 2022-09-29 19:30:00 · 182 阅读 · 0 评论 -
【JAVA】力扣-23-合并K个升序链表
【代码】【力扣-合并K个升序链表】原创 2022-09-29 20:30:00 · 216 阅读 · 0 评论