![](https://img-blog.csdnimg.cn/5ad10f9ca0db4985bd607d4d906912d9.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode
文章平均质量分 55
力扣题目及解析
YXXYX
精通CV编程
展开
-
450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。一般来说,删除节点可分为两个步骤:1,首先找到需要删除的节点;2,如果找到了,删除它。说明: 要求算法时间复杂度为 O(h),h 为树的高度。这道题目是一道二叉搜索树的题目,这个题需要考虑多种情况,因为一旦删除一个节点后影响的可能就是该节点下面的所有节点,非常麻烦,看着就很头大,下面是可能的几种情况:没找到删除的节点,遍历到原创 2021-08-31 19:17:42 · 492 阅读 · 0 评论 -
二叉搜索树简介和部分题目
引言二叉搜索树是一个有序树,遵循以下规则:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树二叉搜索树如图:ps:其实这些学习都是建立在二叉树的基础上,强烈建议学好二叉树,因为二叉树是当下运用比较广泛的一种数据结构,而且在二叉树的学习中不仅可以加强栈和队列的知识,还可以学会深搜和广搜,同样为图的学习打下非常好的基础,因为树就可以看成一个图;对于二叉搜索树,如果你做过比较多的二叉树的题原创 2021-08-31 18:32:36 · 382 阅读 · 0 评论 -
76. 最小覆盖子串(滑动窗口)
给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。——————————————————————————————————————————————————————示例 1:输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”示例原创 2021-08-21 18:27:47 · 298 阅读 · 0 评论 -
904. 水果成篮(滑动窗口)模板题
在一排树中,第 i 棵树产生 tree[i] 型的水果。你可以从你选择的任何树开始,然后重复执行以下步骤:1,把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。2,移动到当前树右侧的下一棵树。如果右边没有树,就停下来。请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。你有两个篮子,每个篮子可以携带任何数量的水果,但你希望每个篮子只携带一种类型的水果。用这个程序你能收集的水果树的最大总量是多少?——————原创 2021-08-21 11:46:33 · 289 阅读 · 0 评论 -
59. 螺旋矩阵 II(模拟)
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]提示:1 <= n <= 20这个题目是一道典型的模拟题目,不涉及什么算法,考察的就是对代码的使用灵活度;其实一看就应该想到添加数其实就是分为几个循环来做,填充上行从左到右填充右列从上到下填充下行从右到左填充左列原创 2021-08-20 16:18:38 · 278 阅读 · 0 评论 -
15. 三数之和(双指针)
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]示例 3:输入:nums = [0]输出:[]提示:0 <= nums.length <= 3000-105 <原创 2021-08-19 12:23:31 · 192 阅读 · 0 评论 -
113. 路径总和 (剑指 Offer 34. 二叉树中和为某一值的路径)(回溯算法)
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。示例 1:输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22输出:[[5,4,11,2],[5,8,4,5]]示例 2:输入:root = [1,2,3], targetSum = 5输出:[]示例 3:输入:root = [1,2], target原创 2021-08-18 16:50:48 · 183 阅读 · 0 评论 -
51. N 皇后(回溯算法)
n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。示例 1:输入:n = 4输出:[[".Q…","…Q",“Q…”,"…Q."],["…Q.",“Q…”,"…Q",".Q…"]]解释:如上图所示,4 皇后问题存在两个不同的解法。示例 2:输入:n = 1输出:[[“Q”]原创 2021-08-17 12:33:40 · 620 阅读 · 0 评论 -
332. 重新安排行程(回溯算法)
给你一份航线列表 tickets ,其中 tickets[i] = [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必须从 JFK 开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。例如,行程 [“JFK”, “LGA”] 与 [“JFK”, “LGB”] 相比就更小,排序更靠前。假定所有机票至少存在一种合理的行程。且所有的机票 必须都用一次 且 只能用一次。示例 1:输入原创 2021-08-17 10:48:40 · 411 阅读 · 0 评论 -
47. 全排列 II(回溯算法)
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。示例 1:输入:nums = [1,1,2]输出:[[1,1,2],[1,2,1],[2,1,1]]示例 2:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]提示:1 <= nums.length <= 8-10 <= nums[i] <= 10这个题目是一个排列题目,排列题目和组合、子集原创 2021-08-16 18:39:01 · 273 阅读 · 0 评论 -
491. 递增子序列(回溯算法)
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。示例 1:输入:nums = [4,6,7,7]输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]示例 2:输入:nums = [4,4,3,2,1]输出:[[4,4]]提示:1 <= nums.len原创 2021-08-16 16:16:12 · 498 阅读 · 0 评论 -
93. 复原 IP 地址(回溯算法)
给定一个只包含数字的字符串,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。示例 1:输入:s = “2552551113原创 2021-08-16 09:30:00 · 464 阅读 · 0 评论 -
131. 分割回文串(回溯算法)
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串。示例 1:输入:s = “aab”输出:[[“a”,“a”,“b”],[“aa”,“b”]]示例 2:输入:s = “a”输出:[[“a”]]提示:1 <= s.length <= 16s 仅由小写英文字母组成这道题同样是回溯,但是和前面两道有点不同,前面是求组合,这个是求分割,但是画出来N叉树后就会发现,其实分割就是求的组合;原创 2021-08-15 19:07:09 · 538 阅读 · 0 评论 -
17. 电话号码的字母组合(回溯算法)
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例 1:输入:digits = “23”输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]示例 2:输入:digits = “”输出:[]示例 3:输入:digits = “2”输出:[“a”,“b”,“c”]提示:0 <= digits.length <=原创 2021-08-15 12:14:00 · 248 阅读 · 0 评论 -
77. 组合(回溯算法)
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。示例 1:输入:n = 4, k = 2输出:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],]示例 2:输入:n = 1, k = 1输出:[[1]]提示:1 <= n <= 201 <= k <= n这道题是典型的回溯题目,回溯算法虽然效率不怎么高但是在一些情况下只能用回溯去解决,就比如这道题目,如果暴力原创 2021-08-15 10:19:58 · 438 阅读 · 0 评论 -
968. 监控二叉树(递归+贪心)
给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。 上图显示了摄像头放置的有效位置之一。提示:给定树的节点数的范围是 [1, 1000]。每个节点的值都是 0。原创 2021-08-14 10:46:53 · 211 阅读 · 0 评论 -
738. 单调递增的数字(贪心算法)
给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)示例 1:输入: N = 10输出: 9示例 2:输入: N = 1234输出: 1234示例 3:输入: N = 332输出: 299————————————————————————————————————————————————————————这道题贪心算法思路就是:局部原创 2021-08-13 19:18:49 · 197 阅读 · 0 评论 -
435. 无重叠区间(贪心算法)
给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。注意:可以认为区间的终点总是大于它的起点。区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。示例 1: 输入: [ [1,2], [2,3], [3,4], [1,3] ]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:输入: [ [原创 2021-08-13 12:16:59 · 266 阅读 · 0 评论 -
队列化栈&&栈化队列(力扣)
用队列实现栈请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、原创 2021-06-09 21:03:56 · 151 阅读 · 0 评论 -
删除有序数组中的重复项(数组去重)
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。说明: 为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下:// nums是以“引用”方式传递的。也就是说,不对实参做任何拷贝int len = removeDuplicates(num原创 2021-05-19 11:33:38 · 513 阅读 · 0 评论 -
回文链表。
请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true方法一:1.找到中间节点(快慢指针,快走二,慢走一,最后慢为中间节点位置)2.中间节点之后的链表反转(前一个节点指针域指向后一个节点)3.前半部分链表和后半部分反转的链表比较4.后半部分反转的链表回归原样(因为通过函数对链表操作最好不要修改原链表结构)//判断一个链表是否为回文链表/* * Definition for sing原创 2021-05-15 19:07:30 · 96 阅读 · 0 评论 -
合并排序的数组
给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B。 编写一个方法,将 B 合并入 A 并排序。初始化 A 和 B 的元素数量分别为 m 和 n。示例:输入:A = [1,2,3,0,0,0], m = 3B = [2,5,6], n = 3输出: [1,2,2,3,5,6]说明: A.length == n + m这道题最简单的思路是直接将数组B与A合并然后再排序,但是过于麻烦切时间复杂度为O(nlogn);而用指针则可以用O(n)的时间复杂度解决原创 2021-05-18 19:28:06 · 132 阅读 · 0 评论 -
环形链表。
给定一个链表,判断链表中是否有环。如果链表中存在环,则返回 true 。 否则,返回 false 。思路:定义快慢指针,快指针一次走两个节点,慢指针一次走一个节点,若链表中有环形链表,则快指针一定会与慢指针相遇。注意:该题的快慢指针开始并没有在一个起点,是为了满足while的条件。/* * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; *原创 2021-05-15 16:49:05 · 105 阅读 · 0 评论 -
移除重复节点
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?思路:哈希表略;这里可以设置两个循环,依此遍历删除重复节点,内循环删除了重复节点后外循环也随之改变,直到全部去重完成;//移除未排序链表中的重复节点。保留最开始出现原创 2021-05-15 20:44:59 · 147 阅读 · 0 评论 -
移动零&&移除元素
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。这道题我开始想到了某种交换应该可以解决,但是没有写出代码;看了官方的题解后真的是太妙了,大致思路是:两个指针fast和slow开始位于数组首端,如果fast不为0则与slow交换数值,若为零则继续向前走;在这里fast将会遍历完数组中的所有元素,但是slow除了首元素原创 2021-05-18 16:22:59 · 118 阅读 · 0 评论 -
两数之和 II - 输入有序数组
给定一个已按照 升序排列 的整数数组 numbers ,请你从数组中找出两个数满足相加之和等于目标数 target 。函数应该以长度为 2 的整数数组的形式返回这两个数的下标值。numbers 的下标 从 1 开始计数 ,所以答案数组应当满足 1 <= answer[0] < answer[1] <= numbers.length 。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例 1:输入:numbers = [2,7,11,15], target =原创 2021-05-18 18:00:45 · 162 阅读 · 0 评论 -
二叉树的最近公共祖先(递归)
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]示例 1:输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1原创 2021-07-15 12:20:01 · 658 阅读 · 1 评论 -
平衡二叉树
给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。示例 1:输入:root = [3,9,20,null,null,15,7]输出:true示例 2:输入:root = [1,2,2,3,3,null,null,4,4]输出:false示例 3:输入:root = []输出:true提示:树中的节点数在范围 [0, 5000] 内-104 <= Node.val <原创 2021-05-23 17:24:38 · 109 阅读 · 0 评论 -
打印折痕方向(二叉树应用)
请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。例:N=1时,打印:downN=2时,打印:down down up这道题可以先拿个纸条折一下试试(略),会发现其中的规律:第一次折 折痕记为1凹第二次折 折痕记为2凹,2凸原创 2021-07-09 18:30:32 · 161 阅读 · 0 评论 -
递增顺序搜索树
给你一棵二叉搜索树,请你 按中序遍历 将其重新排列为一棵递增顺序搜索树,使树中最左边的节点成为树的根节点,并且每个节点没有左子节点,只有一个右子节点。示例 1:输入:root = [5,3,6,2,4,null,8,1,null,null,null,7,9]输出:[1,null,2,null,3,null,4,null,5,null,6,null,7,null,8,null,9]示例 2:输入:root = [5,1,7]输出:[1,null,5,null,7]这道题没有什么难度,非常适合原创 2021-05-22 17:14:21 · 245 阅读 · 0 评论 -
最大子列和问题
给定K个整数组成的序列{ N1, N2, …, NK },“连续子列”被定义为{ Ni, Ni+1, …, Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:数据1:与样例等价,测试基本正确性;原创 2021-05-15 08:39:56 · 127 阅读 · 0 评论 -
01背包问题
引言01背包问题是最经典的一种背包类型,在面试题中经常会遇到,在这我就来详细的聊一聊01背包问题的一些细节和解法;01背包问题有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求背包放哪些物品后价值最大。 ps:weight数组的大小 就是物品个数题解1,设dp[i][j]表示从下标[0~i]的物品中任取,放到容量为j的背包中的最大总价值;2,转移方程:(两种情况)2.1,背包放不下物品 i 时(此时物品原创 2021-07-29 21:41:13 · 244 阅读 · 0 评论 -
01两数之和(哈希表)
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。示例 2:输入:nums = [3,2,4], target = 6原创 2021-08-05 18:05:12 · 172 阅读 · 0 评论 -
目标和(01背包应用)
给你一个整数数组 nums 和一个整数 target 。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式 :例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1” 。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。示例 1:输入:nums = [1,1,1,1,1], target = 3输出:5解释:一共有 5 种方法让最终目标和为 3 。-原创 2021-07-30 17:53:47 · 220 阅读 · 0 评论 -
135. 分发糖果(贪心算法)
老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。评分更高的孩子必须比他两侧的邻位孩子获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?示例 1:输入:[1,0,2]输出:5解释:你可以分别给这三个孩子分发 2、1、2 颗糖果。示例 2:输入:[1,2,2]输出:4解释:你可以分别给这三个孩子分发 1、2、1 颗糖果。第三个孩子只得到 1 颗糖原创 2021-08-12 12:11:15 · 1410 阅读 · 0 评论 -
560. 和为K的子数组 && 974. 和可被 K 整除的子数组 (哈希表)
引言这两道题非常相似,也是对哈希表运用的考察,两道题合到一起总结一下560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 :数组的长度为 [1, 20,000]。数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。这道题就是通过逐一统计数组前缀和再通过哈希表的查找原创 2021-08-09 17:20:41 · 154 阅读 · 0 评论 -
买股票的最佳时机(六种题解dp)
引言买股票的最佳时机类的题目也是很经典的动态规划题目,出题人通过各种花里胡哨的买股票方法来考察(虐待)你,下面我们就开始看看一类的题目的各种花样;买股票的最佳时机给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,原创 2021-08-01 23:04:07 · 419 阅读 · 1 评论 -
最长递增子序列 && 最长连续递增序列
引言这两道题有很大的相似性,在这里主要的地方就是循环的设置,不仅仅适用于这两道题,在很多类似的题目中都可以用到,要学会相应的方法才行;最长递增子序列给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101]原创 2021-08-02 12:09:49 · 518 阅读 · 0 评论 -
最长重复子数组&&最长公共子序列&&不相交的线
引言这同样是两种类型的题目,有很多相似的地方和不同的地方,区别依然是连续和不连续之分。最长重复子数组给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100这道题中说的子数组,其实就是连续的子序列,1,d原创 2021-08-03 11:53:10 · 385 阅读 · 0 评论 -
打家劫舍系列(dp)
引言打家劫舍类的题目是动态规划里的经典题目,有很多种变换形式,下面就介绍一下力扣里面的所有打家劫舍的题目;打家劫舍你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷原创 2021-08-01 18:03:14 · 178 阅读 · 0 评论