算法与数据结构
文章平均质量分 52
随遇而安ing
种一棵树最好的时间是十年前,其次是现在!
展开
-
【Java】力扣 76. 最小覆盖子串
【代码】【Java】力扣 76. 最小覆盖子串。原创 2022-10-27 20:00:00 · 861 阅读 · 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 · 394 阅读 · 0 评论 -
【力扣】509-斐波那契数-多种优化解法
我们可以造一个「备忘录」,每次算出某个子问题的答案后别急着返回,先记到「备忘录」里再返回;每次遇到一个子问题先去「备忘录」里查一查,如果发现之前已经解决过这个问题了,直接把答案拿出来用,不要再耗时去计算了。根据斐波那契数列的状态转移方程,当前状态只和之前的两个状态有关,其实并不需要那么长的一个 DP table 来存储所有的状态,只要想办法存储之前的两个状态就行了。有了上一步「备忘录」的启发,我们可以把这个「备忘录」独立出来成为一张表,通常叫做 DP table,在这张表上完成「自底向上」的推算。原创 2022-10-12 22:00:00 · 108 阅读 · 0 评论 -
【JAVA】力扣-876-链表的中间结点
问题的关键也在于我们无法直接得到单链表的长度 n,常规方法也是先遍历链表计算 n,再遍历一次得到第 n / 2 个节点,也就是中间节点。每当慢指针 slow 前进一步,快指针 fast 就前进两步,这样,当 fast 走到链表末尾时,slow 就指向了链表中点。我们让两个指针 slow 和 fast 分别指向链表头结点 head。原创 2022-09-30 18:15:00 · 290 阅读 · 0 评论 -
【JAVA】力扣-19.删除链表的倒数第 N 个结点
【代码】【JAVA】力扣-19.删除链表的倒数第 N 个结点。原创 2022-09-29 22:30:00 · 145 阅读 · 0 评论 -
【JAVA】力扣-23-合并K个升序链表
【代码】【力扣-合并K个升序链表】原创 2022-09-29 20:30:00 · 124 阅读 · 0 评论 -
【JAVA】力扣-86-分隔链表
【代码】【力扣-分隔链表】原创 2022-09-29 19:45:00 · 111 阅读 · 0 评论 -
【JAVA】力扣-21-合并两个有序链表
【代码】【力扣-合并两个有序链表】原创 2022-09-29 19:30:00 · 76 阅读 · 0 评论 -
【Java实现链表基本操作】
一、链表的基础定义二、Java中定义一个数据节点三、查找特定位置的链表节点四、向链表指定位置添加新的结点五、在链表末尾添加新的节点六、删除指定位置的节点七、移除末尾节点,并返回对应数据八、根据节点的值删除对应的节点九、打印输出链表中的值十、整体代码链表是线性表的一种,但在内存中不一定是连续存储的,而是可以存在于内存中未被占用的任意位置。基于此,链表这种数据结构,除了要存储数据元素的信息外,还需要存储它的后继元素的存储地址。原创 2022-09-27 17:25:59 · 453 阅读 · 2 评论 -
【JAVA】力扣-5-最长回文子串
如果回文串的长度为奇数,则它有一个中心字符;如果回文串的长度为偶数,则可以认为它有两个中心字符。这样,如果输入相同的 l 和 r,就相当于寻找长度为奇数的回文串,如果输入相邻的 l 和 r,则相当于寻找长度为偶数的回文串。找回文串的难点在于,回文串的的长度可能是奇数也可能是偶数,解决该问题的核心是从中心向两端扩散的双指针技巧。原创 2022-09-30 20:45:00 · 968 阅读 · 0 评论 -
【JAVA】力扣-167-两数之和 II
数组有序,可以采用双指针技巧,通过调节 left 和 right 就可以调整 sum 的大小,从而求解。原创 2022-09-30 20:45:00 · 756 阅读 · 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 · 451 阅读 · 0 评论 -
【JAVA】-判断链表是否包含环
如果 fast 最终遇到空指针,说明链表中没有环;如果 fast 最终和 slow 相遇,那肯定是 fast 超过了 slow 一圈,说明链表中含有环。每当慢指针 slow 前进一步,快指针 fast 就前进两步。原创 2022-09-30 18:30:00 · 1186 阅读 · 0 评论