
LeetCode
文章平均质量分 77
ItsJingdai
这个作者很懒,什么都没留下…
展开
-
LeetCode 无重复字符的最长子串(3题)
LeetCode 无重复字符的最长子串@author:Jingdai@date:2022.01.17题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例输入s = "abcabcbb"示例输出3 解释因为无重复字符的最长子串是 "abc",所以其长度为 3。思路及代码我们可以从头到尾遍历每个字符,记录以每个字符结尾的不含重复字符的长度,然后从中选出最长的就是结果。那现在问题就变成了怎么求出以每个字符结尾的不含重复字符的长度。方法1:基于滑动窗原创 2022-01-17 13:05:44 · 439 阅读 · 0 评论 -
LeetCode 课程表 III(630题)
LeetCode 课程表 III@author:Jingdai@date:2021.09.17题目描述这里有 n 门不同的在线课程,他们按从 1 到 n 编号。每一门课程有一定的持续上课时间(课程时间)t 以及关闭时间第 d 天。一门课要持续学习 t 天直到第 d 天时要完成,你将会从第 1 天开始。给出 n 个在线课程用 (t, d) 对表示。你的任务是找出最多可以修几门课。示例输入[[100, 200], [200, 1300], [1000, 1250], [2000, 3200]]原创 2021-09-17 17:38:59 · 440 阅读 · 0 评论 -
LeetCode 零钱兑换 II(518题)完全背包转换
LeetCode 零钱兑换 II@author:Jingdai@date:2021.09.12题目描述(518题)给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。示例输入amount = 5, coins = [1, 2, 5]示例输出4解释解释:有四种方式可以凑成总金额:5原创 2021-09-12 15:43:58 · 286 阅读 · 0 评论 -
LeetCode 根据身高重建队列(406题)
LeetCode 根据身高重建队列@author:Jingdai@date:2021.03.18题目描述(406题)假设有打乱顺序的一群人站成一个队列,数组 people 表示队列中一些人的属性(不一定按顺序)。每个 people[i] = [hi, ki] 表示第 i 个人的身高为 hi ,前面 正好 有 ki 个身高大于或等于 hi 的人。请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第原创 2021-03-18 15:22:53 · 510 阅读 · 1 评论 -
LeetCode 寻找两个正序数组的中位数(4题)
LeetCode 寻找两个正序数组的中位数(4题)@author:Jingdai@date:2021.03.14题目描述(4题)给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。思路及代码如果不考虑时间复杂度,可以很容易想到两种方法,一种是先将数组合并,然后进行排序后找中位数,时间复杂度是 O((m+n)*log(m+n));另一种是根据数组顺序进行合并,合并后就是有序的数组,然后在求中位数,时间复杂度是 O(m+n原创 2021-03-14 21:34:44 · 472 阅读 · 0 评论 -
LeetCode 零钱兑换(322题)四种方法求解
LeetCode 零钱兑换@author:Jingdai@date:2021.01.10题目描述(322题)给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 :输入:coins = [1, 2, 5], amount = 11输出:3 解释:11 = 5 + 5 + 1思路及代码看到这个题目时,我第一想到的就是用 dfs 或者原创 2021-01-10 23:16:30 · 956 阅读 · 0 评论 -
LeetCode 岛屿数量(200题)DFS、BFS、并查集
LeetCode 岛屿数量@author:Jingdai@date:2020.12.29题目描述(200题)给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 :输入:grid = [ ["1","1","0","0","0"], ["1","1","0","0","0"], ["0","0","1","0","0"],原创 2020-12-29 20:44:49 · 287 阅读 · 0 评论 -
LeetCode 最大交换(670题)两种方法图解
LeetCode 最大交换@author:Jingdai@date:2020.12.25题目描述(670题)给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。示例 1 :输入: 2736输出: 7236解释: 交换数字2和数字7。思路及代码方法1 排序首先看一种好理解的方法,第一步将原数字按从大到小的顺序排序,也就是如果不规定交换次数所能达到的最大值。如图,比如题目中的 2736 排序后就得到了 sortedNums = 7632。然后我们对比排序后的数原创 2020-12-25 22:37:24 · 742 阅读 · 0 评论 -
LeetCode LRU 缓存机制(146题)
LeetCode LRU 缓存机制(146题)@author:Jingdai@date:2020.12.11题目描述(146题)运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存。int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int val原创 2020-12-11 22:20:36 · 161 阅读 · 0 评论 -
LeetCode 删除二叉搜索树中的节点(450题)递归与非递归
LeetCode 删除二叉搜索树中的节点@author:Jingdai@date:2020.12.06题目描述(450题)给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。题目分析对于一个二叉搜索树,要删除树中一个节点,分3种情况。情况1:如果要删除的节点是叶子节点,比如图中节点12,可以直接删除。情况2:如果要删除的节点只有一个子树,比如图中节点5,可以将该节点的子原创 2020-12-06 21:25:42 · 387 阅读 · 0 评论 -
LeetCode 组合总和 Ⅱ(40题)图解
LeetCode 组合总和 Ⅱ@author:Jingdai@date:2020.11.30题目描述(40题)给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例:输入: candidates = [2,5,2,1,2], target = 5输出: [ [1,2原创 2020-11-30 16:34:02 · 170 阅读 · 0 评论 -
LeetCode 正则表达式匹配(10题)dp和递归方法
LeetCode 正则表达式匹配@author:Jingdai@date:2020.11.28题目描述(10题)给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素提示:s 可能为空,且只包含从 a-z 的小写字母p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *保证每次出现字符 * 时,前面都匹配到有效的字符示例1输入: s = "aa" p = "原创 2020-11-28 16:26:24 · 158 阅读 · 0 评论 -
LeetCode 最长回文子串(5题)
LeetCode 最长回文子串@author:Jingdai@date:2020.11.13题目描述(5题)给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例输入"babad"示例输出"bab"注意:“aba” 也是一个有效答案。思路及代码动态规划首先看这个题用动态规划怎么做。动态规划最重要的就是要找到状态转移方程。对于一个串,如果它是一个回文串,则从它前后各去掉一个字符(不考虑边界问题),它仍然是一个回文串。即原创 2020-11-13 21:11:41 · 357 阅读 · 0 评论 -
LeetCode 在排序数组中查找元素的第一个和最后一个位置(34题)
LeetCode 在排序数组中查找元素的第一个和最后一个位置@author:Jingdai@date:2020.11.09题目描述(34题)给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例输入nums = [5,7,7,8,8,10], target = 8示例输出[3,4]思路这个题是典型的二分原创 2020-11-09 22:36:51 · 164 阅读 · 0 评论 -
LeetCode 二叉树的最近公共祖先(236题)三种解法详解
LeetCode 二叉树的最近公共祖先@author:Jingdai@date:2020.11.06题目描述(236题)给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。注意:一个节点也可以是它自己的祖先。说明:所有节点的值都是唯一的。p、q 为不同节点且均存在于给定的二叉树中。题目分析如图,二叉树的公共祖先分成两种情况。第一种情况是两个节点 p 、q 分别位于最近公共祖先的异侧。第二种情况是两个节点 p 、q 其一就是他们的公共祖先,另一个节点位于它的子树中。思路及代原创 2020-11-06 22:12:38 · 510 阅读 · 0 评论 -
LeetCode 对称二叉树(101题)
LeetCode 对称二叉树@author:Jingdai@date:2020.11.03题目描述(101题)给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2/ \ / \3 4 4 3思路1.递归方法如图,可以看出一个对称二叉树的左子树和右子树是镜像对称的,同时左子树的左子树又是和右子树的右子树镜像对称的,左子树的右子树是和右子树的左子树镜像对称的…这不就是一个典型的递归问题吗?根据这个性质原创 2020-11-03 22:34:55 · 202 阅读 · 0 评论 -
LeetCode 去除重复字母(316题)
LeetCode 去除重复字母(316题)@author:Jingdai@date:2020.10.27题目描述(316题)给你一个字符串 s ,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。示例输入s = "bcabc"示例输出"abc"提示s 由小写英文字母组成思路题目大概一看可能会认为很简单,不就是去个重嘛。但仔细看会发现不是这样,题目的难点根本不是去重,而是要使字典序最小,同时不能打原创 2020-10-27 11:04:03 · 181 阅读 · 0 评论 -
LeetCode 移掉K位数字(402题)
LeetCode 移掉K位数字(402题)@author:Jingdai@date:2020.10.24题目描述(402题)给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。注意 num 的长度 ≥ k num 不会包含任何前导零示例输入num = "1432219", k = 3示例输出"1219"解释移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。思路题目要求是移除 k 位数字,所原创 2020-10-24 21:04:11 · 154 阅读 · 0 评论 -
LeetCode 最长有效括号(32题)
LeetCode 最长有效括号@author:Jingdai@date:2020.10.10题目描述(32题)给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。示例输入")()())"示例输出4解释最长有效括号子串为 "()()"思路方法1 dp动态规划,建立一个长度等于字符串长度的数组 dp[] ,数组 dp[i] 的值代表以 i 结尾的子串的最长有效括号长度。初始条件很明显,初始条件 dp[0] = 0。原创 2020-10-10 20:45:40 · 139 阅读 · 0 评论 -
LeetCode 使数组唯一的最小增量(945题)
LeetCode 使数组唯一的最小增量(945题)@author:Jingdai@date:2020.10.07题目描述(945题)给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。返回使 A 中的每个值都是唯一的最少操作次数。示例输入[1,2,2]示例输出1解释经过一次 move 操作,数组将变为 [1, 2, 3]提示:0 <= A.length <= 400000 <= A[i] < 40000原创 2020-10-07 11:24:15 · 148 阅读 · 0 评论 -
LeetCode 矩阵置零(73题)
LeetCode 矩阵置零@author:Jingdai@date:2020.09.30题目描述(73题)给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例输入:[ [1,1,1], [1,0,1], [1,1,1]]示例输出:[ [1,0,1], [0,0,0], [1,0,1]]思路看到题目,第一想法应该是使用两个集合分别记录哪些行和哪些列应该设置为0,当遍历到 matrix[i]原创 2020-09-30 10:16:50 · 192 阅读 · 0 评论 -
LeetCode 字符串相乘(43题)
LeetCode 字符串相乘@author:Jingdai@date:2020.09.26题目描述(43题)给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,乘积也表示为字符串形式。示例输入: num1 = "745", num2 = "12"输出: "8940"不能使用任何标准库的大数类型(比如 BigInteger)或直接将输入转换为整数来处理。思路方法1如图,就是利用小学学习过的乘法,对 num2 从低位开始每一位原创 2020-09-26 19:35:05 · 197 阅读 · 0 评论 -
LeetCode 字符串相加(415题)
LeetCode 字符串相加@author:Jingdai@date:2020.09.25题目描述(415题)给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。不能使用任何 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。思路这个其实没什么好说的,就是简单记录一下代码。从低位开始各个位相加,有进位记录进位,直接看代码。代码public String add(String num1, String num2) { int i = nu原创 2020-09-25 19:33:25 · 199 阅读 · 0 评论 -
LeetCode 回文数(9题)巧解
LeetCode 回文数@author:Jingdai@date:2020.09.23题目描述(9题)判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。如121、123321。思路判断回文数非常简单,就和字符串判断回文一样,一个双指针就可以解决。但是需要额外多创建一个字符串,这里不用这种方法,用一种比较巧妙的方法解决这个问题。首先想到可以将整个整数翻转,如果翻转得到的数字和原来的数字一样,则代表是回文数,否则不是。有些细心的童靴可能会想到有整数溢出问原创 2020-09-23 16:14:12 · 246 阅读 · 0 评论 -
LeetCode 划分字母区间(763题)
LeetCode 划分字母区间@author:Jingdai@date:2020.09.21题目描述(763题)字符串 S 由小写字母'a' 到 'z'组成,把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。示例输入:S = “ababcbacadefegdehijhklij”示例输出:[9,7,8]思路题目要求同一个字母只能出现在一个片段中,那么就从第一个字母开始,找到第一个字母最后出现的位置,把他当做片段临时的结尾,然原创 2020-09-21 10:34:07 · 211 阅读 · 0 评论 -
LeetCode 三数之和(详解)
LeetCode 三数之和@author:Jingdai@date:2020.09.10题目描述(15题)给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。思路基本(双指针)题目中明确说明不能包含重复的三元组,为了避免找出三元组后再去重,要先对数组进行排序方便在寻找的过程中去重。先确定一个数,然后再在剩下的数中找出所有满足要求两个原创 2020-09-10 17:14:16 · 1577 阅读 · 0 评论