LeetCode
刷题!
一个小猴子`
天道酬勤-厚积薄发。
展开
-
LeetCode56:合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。原创 2024-05-05 18:05:49 · 32 阅读 · 0 评论 -
LeetCode763:划分字母区间
从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点。给你一个字符串 s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。统计每一个字符最后出现的位置。原创 2024-05-05 17:31:47 · 70 阅读 · 0 评论 -
LeetCode435:无重叠区间
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi]。返回 需要移除区间的最小数量,使剩余区间互不重叠。原创 2024-05-05 12:01:17 · 22 阅读 · 0 评论 -
LeetCode452:用最少数量的箭引爆气球
在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。如果这个气球和上个气球能使用同一支箭,就更新右边界为两个气球的最小右边界,便于和下一个气球进行比较。给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数。原创 2024-05-05 11:32:12 · 60 阅读 · 0 评论 -
LeetCode406:根据身高重建队列
排序完的people: [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]]插入[4,4]:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]]插入[5,0]:[[5,0],[7,0],[6,1],[7,1]]插入[6,1]:[[7,0],[6,1],[7,1]]插入[7,1]:[[7,0],[7,1]]插入[7,0]:[[7,0]]使用链表插入效率更高。原创 2024-05-03 13:55:29 · 166 阅读 · 0 评论 -
LeetCode89:柠檬水找零
给你一个整数数组 bills ,其中 bills[i] 是第 i 位顾客付的账。如果你能给每位顾客正确找零,返回 true ,否则返回 false。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。注意,一开始你手头没有任何零钱。原创 2024-05-02 10:35:53 · 237 阅读 · 0 评论 -
LeetCode135:分发糖果
n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。请你给每个孩子分发糖果,计算并返回需要准备的 最少糖果数目。相邻两个孩子评分更高的孩子会获得更多的糖果。每个孩子至少分配到 1 个糖果。然后再计算左边比右边大的情况。先计算右边比左边大的情况。原创 2024-05-02 10:05:47 · 296 阅读 · 0 评论 -
LeetCode1005:K次取反后最大化的数组和
选择某个下标 i 并将 nums[i] 替换为 -nums[i]。第一步:将数组按照绝对值大小从大到小排序,注意要按照绝对值的大小。第三步:如果K还大于0,那么反复转变数值最小的元素,将K用完。重复这个过程恰好 k 次。可以多次选择同一个下标 i。第二步:从前向后遍历,遇到负数将其变为正数,同时K–以这种方式修改数组后,返回数组 可能的最大和。原创 2024-04-30 10:31:20 · 245 阅读 · 0 评论 -
LeetCode45:跳跃游戏Ⅱ
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。在遍历的同时维护两个变量:1.当前能走到的最远位置maxPos 2.上次跳跃能走到的右边界end。返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。如果遍历的时候到达了end但是并没有到达终点就说明需要进行跳跃。原创 2024-04-29 10:49:11 · 277 阅读 · 1 评论 -
LeetCode55:跳跃游戏
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。贪心算法局部最优解:每次取最大跳跃步数(取最大覆盖范围),整体最优解:最后得到整体最大覆盖范围,看是否能到终点。判断你是否能够到达最后一个下标,如果可以,返回 true;否则,返回 false。每次移动取最大跳跃步数(得到最大的覆盖范围),每移动一个单位,就更新最大覆盖范围。原创 2024-04-29 10:08:40 · 484 阅读 · 1 评论 -
LeetCode122:买卖股票的最佳时机Ⅱ
相当于(prices[3] - prices[2]) + (prices[2] - prices[1]) + (prices[1] - prices[0])。假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。这道题目可能我们只会想,选一个低的买入,再选个高的卖,再选一个低的买入…此时就是把利润分解为每天为单位的维度,而不是从 0 天到第 3 天整体去考虑!原创 2024-04-28 20:38:34 · 119 阅读 · 0 评论 -
LeetCode53:最大子数组和
从代码角度上来讲:遍历 nums,从头开始用 count 累积,如果 count 一旦加上 nums[i]变为负数,那么就应该从 nums[i+1]开始从 0 累积 count 了,因为已经变为负数的 count,只会拖累总和。局部最优:当前“连续和”为负数的时候立刻放弃,从下一个元素重新计算“连续和”,因为负数加上下一个元素 “连续和”只会越来越小。给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。全局最优:选取最大“连续和”原创 2024-04-28 19:56:51 · 181 阅读 · 0 评论 -
LeetCode455:分发饼干
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。原创 2024-04-27 09:40:47 · 212 阅读 · 0 评论 -
LeetCode51:N皇后
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。原创 2024-04-26 10:06:11 · 191 阅读 · 0 评论 -
LeetCode47:全排列②
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。因为存在去重操作,因此要注重树层上的去重操作。全排列的树层去重操作。原创 2024-04-25 11:07:55 · 270 阅读 · 0 评论 -
LeetCode46:全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列。你可以 按任意顺序 返回答案。使用used记录元素是否使用过,排列是有序的,要注意与组合的区别。原创 2024-04-25 10:18:52 · 246 阅读 · 0 评论 -
LeetCode491:非递减子序列
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。你可以按 任意顺序 返回答案。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。原创 2024-04-25 10:17:03 · 193 阅读 · 0 评论 -
LeetCode90:子集②
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。原创 2024-04-24 09:31:02 · 170 阅读 · 0 评论 -
LeetCode78:子集
给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。原创 2024-04-24 09:01:51 · 255 阅读 · 0 评论 -
LeetCode93:复原IP地址
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。你可以按 任何 顺序返回答案。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “[email protected]” 是 无效 IP 地址。有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。原创 2024-04-23 10:49:09 · 244 阅读 · 0 评论 -
LeetCode131:分割回文串
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是。返回 s 所有可能的分割方案。原创 2024-04-23 09:44:43 · 280 阅读 · 0 评论 -
LeetCode40:组合总和②
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用 一次。使用回溯思想,可能会出现重复的,需要进行去重操作。注意:解集不能包含重复的组合。原创 2024-04-22 09:52:21 · 232 阅读 · 0 评论 -
LeetCode39:组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。如果至少一个数字的被选数量不同,则两种组合是不同的。上个代码对于sum已经大于target的情况,其实是依然进入了下一层递归,只是下一层递归结束判断的时候,会判断sum > target的话就返回。对于给定的输入,保证和为 target 的不同组合数少于 150 个。原创 2024-04-22 09:50:27 · 298 阅读 · 0 评论 -
LeetCode:电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。原创 2024-04-20 11:29:42 · 198 阅读 · 0 评论 -
LeetCode216:组合总和Ⅲ
返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。每个数字 最多使用一次。原创 2024-04-20 10:44:25 · 262 阅读 · 0 评论 -
LeetCode77:组合
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。原创 2024-04-19 10:13:21 · 138 阅读 · 0 评论 -
LeetCode538:把二叉搜索树转换为累加树
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。左右子树也必须是二叉搜索树。使用右中左的遍历顺序。原创 2024-04-18 10:00:33 · 105 阅读 · 0 评论 -
LeetCode108:讲有序数组转换为平衡二叉搜索树
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵。原创 2024-04-18 09:37:08 · 254 阅读 · 0 评论 -
LeetCode669:修剪二叉搜索树
给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在 唯一的答案。所以结果应当返回修剪好的二叉搜索树的新的根节点。注意,根节点可能会根据给定的边界发生改变。原创 2024-04-18 09:12:24 · 247 阅读 · 0 评论 -
LeetCode450:删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。首先找到需要删除的节点;如果找到了,删除它。原创 2024-04-17 10:21:03 · 242 阅读 · 0 评论 -
LeetCode701:二叉搜索树中的插入操作
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。原创 2024-04-17 09:11:33 · 204 阅读 · 0 评论 -
LeetCode235:二叉搜索树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。原创 2024-04-16 10:00:06 · 200 阅读 · 0 评论 -
LeetCode236:二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。使用后序遍历和回溯的思想。原创 2024-04-16 09:26:29 · 354 阅读 · 0 评论 -
LeetCode501:二叉搜索树中的众数
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。如果树中有不止一个众数,可以按 任意顺序 返回。结点左子树中所含节点的值 小于等于 当前节点的值。结点右子树中所含节点的值 大于等于 当前节点的值。左子树和右子树都是二叉搜索树。原创 2024-04-15 09:48:11 · 154 阅读 · 0 评论 -
LeetCode530:二叉搜索树的最小绝对差
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值。差值是一个正数,其数值等于两值之差的绝对值。使用双指针,不用开辟新的空间。原创 2024-04-15 08:42:31 · 111 阅读 · 0 评论 -
LeetCode700:验证二叉搜索树
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。所有左子树和右子树自身必须也是二叉搜索树。节点的右子树只包含 大于 当前节点的数。只包含 小于 当前节点的数。使用中序遍历是有序的特性。原创 2024-04-13 10:08:17 · 153 阅读 · 0 评论 -
LeetCode700:二叉搜索树中的搜索
你需要在 BST 中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null。给定二叉搜索树(BST)的根节点 root 和一个整数值 val。原创 2024-04-13 09:11:22 · 201 阅读 · 0 评论 -
LeetCode617:合并二叉树
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。给你两棵二叉树: root1 和 root2。注意: 合并过程必须从两个树的根节点开始。返回合并后的二叉树。原创 2024-04-12 09:34:46 · 249 阅读 · 0 评论 -
LeetCode654:最大二叉树
给定一个不重复的整数数组 nums。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。创建一个根节点,其值为 nums 中的最大值。返回 nums 构建的 最大二叉树。原创 2024-04-12 09:12:05 · 214 阅读 · 0 评论 -
LeetCode106:从中序与后序遍历序列构造二叉树
给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点。第五步:切割后序数组,切成后序左数组和后序右数组。第一步:如果数组大小为零的话,说明是空节点了。原创 2024-04-11 10:19:57 · 256 阅读 · 0 评论