LeetCode
文章平均质量分 75
LeetCode
sunghosts
这个作者很懒,什么都没留下…
展开
-
编辑距离算法
转:https://www.jianshu.com/p/a617d20162cf概述编辑距离(Minimum Edit Distance,MED),由俄罗斯科学家 Vladimir Levenshtein 在1965年提出,也因此而得名 Levenshtein Distance。在信息论、语言学和计算机科学领域,Levenshtein Distance 是用来度量两个序列相似程度的指标。通俗地来讲,编辑距离指的是在两个单词<w1,w2><w_1, w_2><w1,w2转载 2021-05-11 16:39:16 · 2854 阅读 · 0 评论 -
二叉树中的最大路径和-递归
路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。该路径 至少包含一个 节点,且不一定经过根节点。解释:最优路径是 15 -> 20 -> 7 ,路径和为 15 + 20 + 7 = 42。解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6。输入:root = [-10,9,20,null,null,15,7]给你一个二叉树的根节点 root ,返回其 最大路径和。输入:root = [1,2,3]路径和 是路径中各节点值的总和。原创 2023-08-24 23:40:36 · 582 阅读 · 0 评论 -
排序链表-归并排序
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表。示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]提示:链表中节点的数目在范围 [0, 5 *104] 内−105105进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?原创 2023-08-24 23:37:51 · 112 阅读 · 0 评论 -
LRU 缓存
转:https://leetcode.cn/problems/lru-cache/solutions/259678/lruhuan-cun-ji-zhi-by-leetcode-solution/?请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。转载 2023-08-24 23:31:43 · 67 阅读 · 0 评论 -
目标和-动态规划
给你一个整数数组 nums 和一个整数 target。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1”。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 3。转载 2023-08-24 23:05:19 · 95 阅读 · 0 评论 -
回文子串-中心拓展
在实现的时候,我们需要处理一个问题,即如何有序地枚举所有可能的回文中心,我们需要考虑回文长度是奇数和回文长度是偶数的两种情况。枚举每一个可能的回文中心,然后用两个指针分别向左右两边拓展,当两个指针指向的元素相同的时候就拓展,否则停止拓展。解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。的时间检测当前的子串是否是回文,整个算法的时间复杂度是。解释:三个回文子串: “a”, “b”, “c”原创 2023-08-24 22:35:53 · 185 阅读 · 0 评论 -
路径总和 III-前缀和&dfs
给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。示例 1:输入:root = [10,5,-3,3,2,null,11,3,-2,null,1], targetSum = 8输出:3解释:和等于 8 的路径有 3 条,如图所示。原创 2023-08-24 01:22:29 · 131 阅读 · 0 评论 -
前 K 个高频元素-堆
给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:105k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。原创 2023-08-23 23:44:47 · 91 阅读 · 0 评论 -
零钱兑换-动态规划
思想来自官方解答:https://leetcode.cn/problems/coin-change/solution/322-ling-qian-dui-huan-by-leetcode-solution/转移过来,再算上枚举的这枚硬币数量 1 的贡献,由于要硬币数量最少,所以。为前面能转移过来的状态的最小值加上枚举的硬币数量 1。代表第j 枚硬币的面值,即我们枚举最后一枚硬币的面值。我们可以看到问题的答案是通过子问题的最优解得到的。则,当 i=0 时无法用硬币组成,为 0。之前,我们已经计算出。转载 2023-08-23 01:19:11 · 64 阅读 · 0 评论 -
最佳买卖股票时机含冷冻期--动态规划
给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。原创 2023-08-23 01:16:57 · 102 阅读 · 0 评论 -
最长递增子序列-动态规划
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。解释:最长递增子序列是 [2,3,7,101],因此长度为 4。给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。输入:nums = [10,9,2,5,3,7,101,18]你能将算法的时间复杂度降低到 O(n log(n)) 吗?输入:nums = [7,7,7,7,7,7,7]输入:nums = [0,1,0,3,2,3]原创 2023-08-23 00:24:23 · 85 阅读 · 0 评论 -
寻找重复数-快慢指针
给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数。你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。示例 1:输入:nums = [1,3,4,2,2]输出:2示例 2:输入:nums = [3,1,3,4,2]输出:3提示:1 <= n <=105。原创 2023-08-23 00:15:13 · 129 阅读 · 0 评论 -
堆排序--leecode
转载https://www.cnblogs.com/chengxiao/p/6129630.html预备知识堆排序堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是转载 2021-07-09 11:34:39 · 230 阅读 · 0 评论 -
课程表-广度优先和图
用一个数组记录每门课程的先导课程,总有没有先导课程的课程,先访问这些课程,随后以这些课程为先导课程的课程减去访问过的先导课程,直到无法再访问课程,这时候根据访问过的课程数据是否是课程总数,决定结果。这里用到两个数据结构,edges变量存放以该课程为先导课程的课程,访问先导课程后就知道哪些课程要减去访问过的课程。输入:numCourses = 2, prerequisites = [[1,0],[0,1]]例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1。原创 2023-08-22 01:13:51 · 141 阅读 · 0 评论 -
最长连续序列-哈希
但仔细分析这个过程,我们会发现其中执行了很多不必要的枚举,如果已知有一个 x, x+1, x+2⋯,x+y 的连续序列,而我们却重新从 x+1,x+2 或者是 x+y 处开始尝试匹配,那么得到的结果肯定不会优于枚举 x 为起点的答案,因此我们在外层循环的时候碰到这种情况跳过即可。我们考虑枚举数组中的每个数 x,考虑以其为起点,不断尝试匹配 x+1, x+2,⋯ 是否存在,假设最长匹配到了 x+y,那么以 x 为起点的最长连续序列即为 x, x+1, x+2,…时间复杂度:O(n),其中 n 为数组的长度。转载 2023-08-22 00:17:13 · 54 阅读 · 0 评论 -
验证二叉搜索树
这个问题比较容易想到递归,但是递归过程中需要注意一个问题,不能只检查当前节点跟左右两个子节点的大小关系,因为BST要求当前节点的左子树的节点都要小于当前节点,这种可能出现不符合BST规则的地方主要存在于:遍历左子树的右子树时,需要右子树大于父节点同时小于爷爷节点;递归遍历是深度优先遍历,是自上而下的遍历,遇到不符合的节点会提前返回,而不往下继续遍历。输入:root = [5,1,4,null,null,3,6]解释:根节点的值是 5 ,但是右子节点的值是 4。输入:root = [2,1,3]原创 2023-08-21 22:21:13 · 114 阅读 · 0 评论 -
最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]解释:连续子数组 [4,-1,2,1] 的和最大,为 6。输入:nums = [5,4,-1,7,8]子数组是数组中的一个连续部分。输入:nums = [1]原创 2023-08-21 21:33:24 · 94 阅读 · 0 评论 -
组合总和-LeetCode
给你一个无重复元素的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的所有不同组合 ,并以列表形式返回。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。输入:candidates = [2,3,6,7], target = 7。输入: candidates = [2,3,5], target = 8。输出: [[2,2,2,2],[2,3,3],[3,5]]输出:[[2,2,3],[7]]原创 2023-08-21 00:01:01 · 225 阅读 · 0 评论 -
搜索旋转排序数组
nums[n-1], nums[0], nums[1], …例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]。代码中的注释是关键,如果nums[mid]不等于target,那么mid两边一定有一边是有序而另一边一定无序,是否有序只要测试nums[left]与nums[mid](nums[mid]与nums[right]也行)就可以知道是否有序,当确定有序的一边后,就可以使用二分查找的条件了。输入:nums = [1], target = 0。原创 2023-08-20 17:50:23 · 294 阅读 · 1 评论 -
三数之和-LeetCode
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]输入:nums = [0,1,1]输入:nums = [0,0,0]解释:唯一可能的三元组和为 0。输出:[[0,0,0]]原创 2023-08-20 15:49:27 · 239 阅读 · 0 评论 -
最长回文子串
给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”提示:s 仅由数字和英文字母组成最长回文子串有多种解法,这里仅仅介绍动态规划方法,其他方法可以看参考文章。原创 2023-08-20 15:47:56 · 79 阅读 · 0 评论 -
无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。示例 1:输入: s = “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: s = “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: s = “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。原创 2023-08-20 15:45:27 · 67 阅读 · 0 评论 -
和为 K 的子数组-前缀和
sdf转载 2022-12-29 23:09:59 · 139 阅读 · 0 评论 -
分割等和子集-动态规划
asdf转载 2022-12-28 22:45:03 · 663 阅读 · 1 评论 -
二叉树展开为链表
fs原创 2022-12-28 22:43:12 · 82 阅读 · 0 评论 -
电话号码的字母组合及其引申出的笛卡尔积和解包操作
gfg原创 2022-12-28 22:42:22 · 214 阅读 · 0 评论 -
单词拆分-动态规划
sf转载 2022-12-28 22:40:05 · 157 阅读 · 0 评论 -
打家劫舍 III-动态规划
df转载 2022-12-28 22:38:59 · 101 阅读 · 0 评论 -
乘积最大子数组-动态规划
ga原创 2022-12-28 22:37:23 · 325 阅读 · 0 评论 -
二叉树的最近公共祖先
lee转载 2022-12-28 22:36:39 · 119 阅读 · 0 评论 -
不同路径-动态规划
不同路径原创 2022-12-28 22:32:29 · 87 阅读 · 0 评论