自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 Leedcode刷题 | Day32_动态规划01

也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n)。选最小的,所以dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);dp[i - 1] 跳到 dp[i] 需要花费 dp[i - 1] + cost[i - 1]。dp[i - 2] 跳到 dp[i] 需要花费 dp[i - 2] + cost[i - 2]。请你找出达到楼层顶部的最低花费。

2025-04-12 23:28:30 237

原创 Leedcode刷题 | Day31_贪心算法05

从前向后遍历的话,遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]减一,但此时如果strNum[i - 1]减一了,可能又小于strNum[i - 2]。输入: intervals = [[1,3],[2,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入: intervals = [[1,4],[4,5]]输出: [[1,6],[8,10],[15,18]]输出: [[1,5]]

2025-04-12 05:33:10 505

原创 Leedcode刷题 | Day30_贪心算法04

非常像,弓箭的数量就相当于是非交叉区间的数量,只要把弓箭那道题目代码里射爆气球的判断条件加个等号(认为[0,1][1,2]不是相邻区间),然后用总区间数减去弓箭数量 就是要移除的区间数量了。解释:对于该样例,x = 6 可以射爆 [2,8],[1,6] 两个气球,以及 x = 11 射爆另外两个气球。输入:points = [[10,16],[2,8],[1,6],[7,12]]输入: [ [1,2], [2,3], [3,4], [1,3] ]输入: [ [1,2], [1,2], [1,2] ]

2025-04-11 05:21:01 375

原创 Leedcode刷题 | Day29_贪心算法03

回归本题,整个插入过程如下:排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2], [4,4]]

2025-04-10 06:19:39 568

原创 Leedcode刷题 | Day28_贪心算法02

举例: nums = [2, 3, 1, 1, 4]i = 0;现在还没跳,当前活动范围就是起始点i = 0,满足i = cur,所以马上需要跳,ans++,这一跳的范围最远到i = 2, cur = 2, next没有大于结束点,循环继续。i =1,开始在第一跳(ans = 1)的范围里面迭代,即从[0,cur = 2]范围内把每个可能的起跳点可到的最大距离计算一下,next = 1 + 3 = 4。

2025-04-09 09:11:53 514

原创 Leedcode刷题 | Day27_贪心算法01

例如, [1,7,4,9,2,5] 是一个摆动序列,因为差值 (6,-3,5,-7,3) 是正负交替出现的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。输入: [1,17,5,10,13,15,10,5,16,8]输入: [-2,1,-3,4,-1,2,1,-5,4]输入: [1,2,3,4,5,6,7,8,9]

2025-04-08 08:52:07 716

原创 Leedcode刷题 | Day25_回溯算法04

输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]数层去重,false就continue!输出: [[1,1,2], [1,2,1], [2,1,1]]输入: [1,2,3]

2025-04-08 05:27:37 691

原创 Leedcode刷题 | 回溯算法小总结01

在这类问题中,问题的本质是多个集合的笛卡尔积,每一层递归对应一个集合,我们只需在每层中枚举当前集合的所有元素即可。因为每一层递归只需要从当前集合中取出一个选项,不存在重复的问题。这是为了避免重复选择相同的元素,保证组合中的元素顺序是固定的,不会出现。控制递归的起点,确保每一层递归只从当前元素或后续元素开始选取,从而避免重复。例如:46. 全排列,47. 全排列 II。例如:77. 组合,39. 组合总和。,因为每次都可以从头开始尝试所有未使用的元素。在排列问题中,元素的顺序是关键的,例如。

2025-04-05 08:53:46 144

原创 Leedcode刷题 | Day24_回溯算法03

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]输入: [1,2,2]

2025-04-05 08:35:13 715

原创 Leedcode刷题 | Day23_回溯算法02

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]

2025-04-04 08:32:09 582

原创 Leedcode刷题 | Day22_回溯算法01

示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。给出数字到字母的映射如下(与电话按键相同)。给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。在以上两道题的基础上提高了难度,不过大体相似。

2025-04-03 02:23:37 713

原创 Leedcode刷题 | Day21_二叉树08

给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。提醒一下,二叉搜索树满足下列约束条件:节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

2025-04-01 11:47:59 725

原创 Leedcode刷题 | Day20_二叉树07

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。236. 二叉树的最近公共祖先中,利用回溯从底向上搜索,遇到一个节点的左子树里有p,右子树里有q,那么当前节点就是最近公共祖先。

2025-04-01 01:14:27 452

原创 Leedcode刷题 | Day18_二叉树06

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。和前一个题,验证二叉搜索树,是一样的思路,一个指针指向中序遍历的前一个结点,一个指针指向后一个,从而达到比较大小(验证二叉搜索树),或者比较差值(二叉搜索树的最小绝对差)的效果。差的最小绝对值之所以可以只比较相邻的值,是因为该树是二叉搜索树,按照中序遍历是一个递增的数组,差的最小绝对值只会可能发生在相邻的数字之间。

2025-03-30 09:16:58 750

原创 Leedcode刷题 | Day17_二叉树05

合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。给定二叉搜索树(BST)的根节点和一个值。你需要在BST中找到节点值等于给定值的节点。给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。通过给定的数组构建最大二叉树,并且输出这个树的根节点。给定一个二叉树,判断其是否是一个有效的二叉搜索树。节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。二叉树的根是数组中的最大元素。

2025-03-30 01:48:14 357

原创 Leedcode刷题 | Day16_二叉树04

给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。根据一棵树的中序遍历与后序遍历构造二叉树。说明: 叶子节点是指没有子节点的节点。注意: 你可以假设树中没有重复的元素。给定一个二叉树,在树的最后一行找到最左边的值。迭代法(层序):最简单。

2025-03-28 10:22:27 270

原创 Leedcode刷题 | Day15_二叉树03

前序遍历的"中"操作(访问当前节点)放在函数开始处,确保路径中包含每个节点,包括最后的叶子节点。(如果中操作放在最后,先判断该结点的左右孩子均为空之后,这个结点为叶子结点,就不能被放入path了)本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。给定一个二叉树,返回所有从根节点到叶子节点的路径。给出一个完全二叉树,求出该树的节点个数。说明: 叶子节点是指没有子节点的节点。递归法(后序):需要往上层传递信息(左叶子值之和)递归法(前序):求根结点-叶子结点路径。

2025-03-28 06:46:51 847

原创 Leedcode刷题 | Day14_二叉树02

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。给定一个二叉树,检查它是否是镜像对称的。说明: 叶子节点是指没有子节点的节点。说明: 叶子节点是指没有子节点的节点。给定一个二叉树,找出其最大深度。给定一个二叉树,找出其最小深度。104.二叉树的最大深度。111.二叉树的最小深度。

2025-03-28 06:43:24 174

原创 Leedcode刷题 | Day13_二叉树01

那么再看看中序遍历,中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了。分析一下为什么刚刚写的前序遍历的代码,不能和中序遍历通用呢,因为前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,递归法层序遍历,先不考虑,先考虑上述队列法。较难,为了不混淆,暂且不看。

2025-03-26 10:36:03 242

原创 Leedcode刷题 | Day11_栈与队列02

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 $O(n \log n)$ , n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。输入: ["2", "1", "+", "3", " * "]输入: nums = [1,1,1,2,2,3], k = 2。输入: ["4", "13", "5", "/", "+"]

2025-03-23 06:22:26 242

原创 Leedcode刷题 | Day10_栈与队列01

解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。遍历,遇到左括号,则将对应右括号入栈,遇到右括号,和栈中符号匹配,一样则pop。

2025-03-23 03:08:08 722

原创 Leedcode刷题 | Day9_字符串02

给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1。示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2。解释: 可由子字符串 "ab" 重复两次构成。输入: "abcabcabcabc"

2025-03-22 06:47:26 1004

原创 Leedcode刷题 | Day8_字符串01

例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。

2025-03-20 06:15:34 307

原创 Leedcode刷题 | Day7_哈希表02

题意:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?

2025-03-19 07:37:47 875

原创 Leedcode刷题 | Day6_哈希表01

当我们要使用集合来解决哈希问题的时候,优先使用unordered_set,因为它的查询和增删效率是最优的,如果需要集合是有序的,那么就用set,如果要求不仅有序还要有重复数据的话,那么就用multiset。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。不连续,使用set,需要去重所以选择set/unordered_set,无序,使用unordered_set。不是,则返回 False。

2025-03-18 02:02:02 623

原创 Leedcode刷题 | Day4_链表02

/ 第一次操作结点(2结点)右侧的结点3。给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。主要注意fast和slow中间差几个,可以让fast指向nullptr时,slow指向要删除结点的前一个。// 第一次操作结点(2结点)左侧的结点1。,请你找出并返回两个单链表相交的起始节点。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。

2025-03-16 08:04:38 605

原创 Leedcode刷题 | Day3_链表01

刷leedcode第三天,主要学习了链表&链表的各种操作。一、今日任务链表理论基础代码随想录代码随想录虚拟头结点的使用代码随想录707.设计链表:链表综合操作代码随想录206.反转链表代码随想录二、具体题目。

2025-03-15 07:57:21 267

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除