![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
刷leetcode笔记
涵sue
这个作者很懒,什么都没留下…
展开
-
LeetCode416 -- 总结0-1背包问题 -- 动态规划
0-1 背包有一个容量为 N 的背包,要用这个背包装下物品的价值最大,这些物品有两个属性:体积 w 和价值 v。定义一个二维数组 dp 存储最大价值,其中 dp[i][j] 表示前 i 件物品体积不超过 j 的情况下能达到的最大价值。设第 i 件物品体积为 w,价值为 v,根据第 i 件物品是否添加到背包中,可以分两种情况讨论:第 i 件物品没添加到背包,总体积不超过 j 的前 i 件...原创 2020-05-06 13:51:40 · 334 阅读 · 0 评论 -
LeetCode983. -- 最低票价
题目描述在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为days的数组给出。每一项是一个从1到365的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为costs[0]美元; 一张为期七天的通行证售价为costs[1]美元; 一张为期三十天的通行证售价为costs[2]美元。通行证允许数天无...原创 2020-05-06 10:52:45 · 145 阅读 · 0 评论 -
LeetCode1143. -- 最长公共子序列 经典动态规划
题目描述给定两个字符串text1和text2,返回这两个字符串的最长公共子序列的长度。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列...原创 2020-05-05 17:10:29 · 181 阅读 · 1 评论 -
LeetCode376. -- 摆动序列
题目描述如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。例如,[1,7,4,9,2,5]是一个摆动序列,因为差值(6,-3,5,-7,3)是正负交替出现的。相反,[1,4,7,2,5]和[1,7,4,5,5]不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为...原创 2020-05-05 15:44:07 · 155 阅读 · 0 评论 -
LeetCode98 -- 验证二叉搜索树 递归/中序
题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例1:输入: 2 / \ 1 3输出: true示例2:输入: 5 / \ 1 4 / \...原创 2020-05-05 12:37:03 · 113 阅读 · 0 评论 -
Leetcode300 -- 最长上升子序列
题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是[2,3,7,101],它的长度是 4说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。 你算法的时间复杂度应该为O(n2) 。进阶:你能将算法的时间复杂度降低到O(nlogn) 吗?...原创 2020-05-05 11:13:36 · 95 阅读 · 0 评论 -
LeetCode -- 买卖股票系列问题 动态规划思想
121. 买卖股票的最佳时机给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,...原创 2020-05-04 16:24:37 · 239 阅读 · 0 评论 -
LeetCode10 -- 正则表达式匹配
题目描述给你一个字符串s和一个字符规律p,请你来实现一个支持'.'和'*'的正则表达式匹配。'.' 匹配任意单个字符'*' 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖整个字符串s的,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。 p可能为空,且只包含从a-z的小写字母,以及字符.和*。示例 1:输入...原创 2020-05-03 15:32:46 · 92 阅读 · 0 评论 -
LeetCode51 -- n皇后问题 经典回溯
题目描述n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。上图为 8 皇后问题的一种解法。给定一个整数n,返回所有不同的n皇后问题的解决方案。每一种解法包含一个明确的n皇后问题的棋子放置方案,该方案中'Q'和'.'分别代表了皇后和空位。示例:输入: 4输出: [ [".Q..", // 解法 1 ...原创 2020-05-03 12:08:08 · 135 阅读 · 0 评论 -
LeetCode445 -- 两数相加 II -- 链表操作
445. 两数相加 II给你两个非空链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。进阶:如果输入链表不能修改该如何处理?换句话说,你不能对列表中的节点进行翻转。示例:输入:(7 -> 2 -> 4 -> 3) + (5 ->...原创 2020-04-30 12:31:15 · 146 阅读 · 0 评论 -
LeetCode207 -- 课程表 -- 拓扑排序
题目描述你这个学期必须选修numCourse门课程,记为0到numCourse-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?示例 1:输入: 2, [[1,0]] 输出: true解释:总共有 2 门课程。学...原创 2020-04-29 12:31:24 · 146 阅读 · 0 评论 -
Leetcode112 and 113 -- 路径总和
LeetCode112 题目描述给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例:给定如下二叉树,以及目标和 sum = 22, 返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。class Solu...原创 2020-04-28 21:09:59 · 112 阅读 · 0 评论 -
LeetCode110 -- 平衡二叉树 -- 递归模板
题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7返回 true 。示例 2:给定二叉树 [1,2,2,3,3,nu...原创 2020-04-27 18:08:59 · 101 阅读 · 0 评论 -
LeetCode114 -- 二叉树展开为链表
题目描述给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5/ \ \3 4 6将其展开为:1\ 2 \ 3 \ 4 \ 5 \ 6解题思路用递归的方式 分成四步1 首先将根节点的左...原创 2020-04-27 16:11:18 · 84 阅读 · 0 评论 -
LeetCode617 -- 合并二叉树
题目描述给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为NULL 的节点将直接作为新二叉树的节点。示例1:输入: Tree 1 Tree 2 ...原创 2020-04-27 15:05:05 · 68 阅读 · 0 评论 -
算法 -- 滑动窗口思想
滑动窗口就是在一个数组上设置一个left指针和right指针。整体框架如下,问题的关键 缩小窗口的时机int left = 0;int right = 0;while (right < s.length()) {` // 增大窗口 window.add(s[right]); right++; while (window 满足一...原创 2020-04-26 14:35:03 · 229 阅读 · 0 评论 -
LeetCode72 -- 编辑距离 动态规划
题目描述给你两个单词word1 和word2,请你计算出将word1转换成word2 所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入:word1 = "horse", word2 = "ros"输出:3解释:horse -> rorse (将 'h' 替换为 'r')rorse -&g...原创 2020-04-25 12:57:34 · 111 阅读 · 0 评论 -
LeetCode4 -- 寻找两个有序数组的中位数 变态的二分
题目描述给定两个大小为 m 和 n 的有序数组nums1和nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为O(log(m + n))。你可以假设nums1和nums2不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, ...原创 2020-04-25 11:16:09 · 96 阅读 · 0 评论 -
LeetCode242 -- 有效的字母异位词 -- int[26]模板
题目描述给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。示例1:输入: s = "anagram", t = "nagaram"输出: true示例 2:输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母。进阶:如果输入字符串包含 unicode 字符怎么办?你能否调整你...原创 2020-04-25 09:45:44 · 182 阅读 · 0 评论 -
LeetCode 406 -- 根据身高重建队列
题目描述假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4]...原创 2020-04-24 18:51:55 · 279 阅读 · 0 评论 -
LeetCode435 -- 无重叠区间
题目描述给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1:输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [...原创 2020-04-24 11:34:00 · 121 阅读 · 0 评论 -
LeetCode45 -- 跳跃游戏2
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标为 1 的位置,跳1步,然后跳3步到达数组的最后一个位置。说明:假设你总是可以...原创 2020-04-24 10:44:06 · 86 阅读 · 0 评论 -
LeetCode496 -- 下一个更大元素 单调栈
题目描述给定两个没有重复元素的数组nums1 和nums2,其中nums1是nums2的子集。找到nums1中每个元素在nums2中的下一个比其大的值。nums1中数字x的下一个更大元素是指x在nums2中对应位置的右边的第一个比x大的元素。如果不存在,对应位置输出-1。示例 1:输入: nums1 = [4,1,2], nums2 = [1,...原创 2020-04-20 14:21:11 · 117 阅读 · 0 评论 -
LeetCode84 -- 矩阵图中最大的矩形
题目描述给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为[2,1,5,6,2,3]。图中阴影部分为所能勾勒出的最大矩形面积,其面积为10个单位。示例:输入: [2,1,5,6,2,3]输出: 10pack...原创 2020-04-20 12:09:37 · 164 阅读 · 0 评论 -
LeetCode55 -- 跳跃游戏
题目描述给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。示例1:输入: [2,3,1,1,4]输出: true解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后再从位置 1 跳 3 步到达最后一个位置。示例2:输入: [3,2,1,0,4]输出: false解释:...原创 2020-04-17 11:23:36 · 74 阅读 · 0 评论 -
二叉树的序列化和反序列化
题目描述序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。你可以将以下二叉树: ...原创 2020-04-07 16:09:04 · 78 阅读 · 0 评论 -
LeetCode 41 -- 缺失的第一个正数
题目描述给你一个未排序的整数数组,请你找出其中没有出现的最小的正整数。示例1:输入: [1,2,0]输出: 3示例2:输入: [3,4,-1,1]输出: 2示例3:输入: [7,8,9,11,12]输出: 1提示:你的算法的时间复杂度应为O(n),并且只能使用常数级别的额外空间。解题思路1 如果不考虑空间复杂度的话 用一个set即可。cla...原创 2020-04-06 10:10:31 · 81 阅读 · 0 评论 -
LeetCode287 -- 寻找重复数 二分法
题目描述给定一个包含n + 1 个整数的数组nums,其数字都在 1 到 n之间(包括 1 和 n),可知至少存在一个重复的整数。假设只有一个重复的整数,找出这个重复的数。示例 1:输入: [1,3,4,2,2]输出: 2示例 2:输入: [3,1,3,4,2]输出: 3说明:不能更改原数组(假设数组是只读的)。只能使用额外的 O(1) 的空间。时间复杂度小...原创 2020-04-05 21:18:50 · 156 阅读 · 0 评论 -
LeetCode33 -- 搜索旋转排序数组 二分法
题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6...原创 2020-04-05 20:31:39 · 74 阅读 · 0 评论 -
LeetCode347 -- 前k个高频元素
题目描述给定一个非空的整数数组,返回其中出现频率前k高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]package leetcode_n;import java.util.ArrayList;import java.util.Hash...原创 2020-03-20 13:54:58 · 84 阅读 · 0 评论 -
LeetCode48 -- 旋转图像
题目描述给定一个 n×n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。示例 1:matrix = [ [1,2,3], [4,5,6], [7,8,9]],原地旋转输入矩阵,使其变为:[ [7,4,1], [8,5,2], [9,6,3...原创 2020-03-16 16:16:35 · 67 阅读 · 0 评论 -
LeetCode57 -- 插入区间
题目描述给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。示例1:输入: intervals = [[1,3],[6,9]], newInterval = [2,5]输出: [[1,5],[6,9]]示例2:输入: intervals = [[1,2],[3,5],[6,...原创 2020-02-26 09:53:23 · 133 阅读 · 0 评论 -
LeetCode46 -- 全排列
题目描述给定一个没有重复数字的序列,返回其所有可能的全排列。示例: 输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]解题思路典型的回溯递归问题。注意,在向结果list中添加path的时候,要深拷贝!package leetcode_1;import...原创 2020-02-10 15:55:34 · 60 阅读 · 0 评论 -
LeetCode148 -- 排序链表(归并排序)
题目描述在O(nlogn) 时间复杂度和常数级空间复杂度下,对链表进行排序。示例 1:输入: 4->2->1->3输出: 1->2->3->4示例 2:输入: -1->5->3->4->0输出: -1->0->3->4->5解题思路题目要求时间空间复杂度分别为O(nlogn)...原创 2020-02-06 21:15:54 · 80 阅读 · 0 评论 -
LeetCode 147 -- 对链表进行插入排序
题目描述对链表进行插入排序。插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。插入排序算法:插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将...原创 2020-02-02 11:47:57 · 86 阅读 · 0 评论 -
leetcode236 二叉树的最近公共祖先
题目描述给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树:root =[3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root...原创 2020-01-17 14:15:43 · 71 阅读 · 0 评论