LeetCode
文章平均质量分 53
主要是记录自己刷题的思路和感悟
远山凛凛
正在努力学习Java的研究生
展开
-
力扣343 整数拆分 Java版本
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。解释: 2 = 1 + 1, 1 × 1 = 1。返回 你可以获得的最大乘积。输入: n = 10。原创 2024-05-21 21:01:45 · 134 阅读 · 0 评论 -
力扣63 不同路径Ⅱ Java版本
机器人试图达到网格的右下角(在下图中标记为 “Finish”)。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]那么从左上角到右下角将会有多少条不同的路径?输入:obstacleGrid = [[0,1],[0,0]]obstacleGrid[i][j] 为 0 或 1。网格中的障碍物和空位置分别用 1 和 0 来表示。解释:3x3 网格的正中间有一个障碍物。原创 2024-05-21 19:36:29 · 86 阅读 · 0 评论 -
力扣62 不同路径 Java版本
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。从左上角开始,总共有 3 条路径可以到达右下角。题目数据保证答案小于等于 2 * 109。输入:m = 3, n = 7。输入:m = 3, n = 2。输入:m = 7, n = 3。输入:m = 3, n = 3。问总共有多少条不同的路径?原创 2024-05-20 20:08:58 · 207 阅读 · 0 评论 -
力扣746 使用最小的花费爬楼梯 Java版本
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。输入:cost = [1,100,1,1,1,100,1,1,100,1]你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。输入:cost = [10,15,20]请你计算并返回达到楼梯顶部的最低花费。解释:你将从下标为 1 的台阶开始。解释:你将从下标为 0 的台阶开始。原创 2024-05-20 19:59:35 · 121 阅读 · 0 评论 -
力扣738 单调递增的数字 Java版本
当且仅当每个相邻位数上的数字 x 和 y 满足 x原创 2024-05-18 15:03:37 · 277 阅读 · 0 评论 -
力扣509 斐波那契数 Java版本
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。F(n) = F(n - 1) + F(n - 2),其中 n > 1。解释:F(2) = F(1) + F(0) = 1 + 0 = 1。解释:F(3) = F(2) + F(1) = 1 + 1 = 2。解释:F(4) = F(3) + F(2) = 2 + 1 = 3。给定 n ,请计算 F(n)。原创 2024-05-18 15:03:14 · 195 阅读 · 0 评论 -
力扣56 合并区间 Java版本
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。输入:intervals = [[1,4],[4,5]]输出:[[1,6],[8,10],[15,18]]输出:[[1,5]]原创 2024-04-18 09:06:38 · 316 阅读 · 0 评论 -
力扣763 划分字母区间 Java版本
像 “ababcbacadefegde”, “hijhklij” 这样的划分是错误的,因为划分的片段数较少。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。划分结果为 “ababcbaca”、“defegde”、“hijhklij”。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。输入:s = “ababcbacadefegdehijhklij”返回一个表示每个字符串片段的长度的列表。输入:s = “eccbbbbdec”输出:[9,7,8]原创 2024-04-18 09:06:18 · 608 阅读 · 0 评论 -
力扣435 无重叠区间 Java版本
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi]。输入: intervals = [[1,2],[2,3],[3,4],[1,3]]输入: intervals = [ [1,2], [1,2], [1,2] ]输入: intervals = [ [1,2], [2,3] ]解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。解释: 你不需要移除任何区间,因为它们已经是无重叠的了。解释: 移除 [1,3] 后,剩下的区间没有重叠。原创 2024-04-17 20:09:24 · 503 阅读 · 0 评论 -
力扣452 用最少数量的箭引爆气球 Java版本
墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。输入:points = [[10,16],[2,8],[1,6],[7,12]]输入:points = [[1,2],[3,4],[5,6],[7,8]]输入:points = [[1,2],[2,3],[3,4],[4,5]]-在x = 11处发射箭,击破气球[10,16]和[7,12]。-在x = 6处射出箭,击破气球[2,8]和[1,6]。原创 2024-04-17 20:09:00 · 492 阅读 · 0 评论 -
力扣406 根据身高重建队列 Java版本
因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]]输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]]输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]]输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]]题目数据确保队列可以被重建。原创 2024-04-16 14:56:58 · 443 阅读 · 0 评论 -
力扣860 柠檬水找零 Java版本
每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。前 2 位顾客那里,我们按顺序收取 2 张 5 美元的钞票。输入:bills = [5,5,5,10,20]原创 2024-04-16 14:56:32 · 373 阅读 · 0 评论 -
力扣134 加油站 Java版本
从 3 号加油站(索引为 3 处)出发,可获得 4 升汽油。你无法返回 2 号加油站,因为返程需要消耗 4 升汽油,但是你的油箱只有 3 升汽油。输入: gas = [1,2,3,4,5], cost = [3,4,5,1,2]开往 3 号加油站,你需要消耗 5 升汽油,正好足够你返回到 3 号加油站。输入: gas = [2,3,4], cost = [3,4,3]开往 0 号加油站,此时油箱有 4 - 3 + 2 = 3 升汽油。开往 1 号加油站,此时油箱有 3 - 3 + 3 = 3 升汽油。原创 2024-04-15 13:54:26 · 475 阅读 · 0 评论 -
力扣1005 k次取反后最大化的数组和 Java版本
解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2]。解释:选择下标 (1, 4) ,nums 变为 [2,3,-1,5,4]。选择某个下标 i 并将 nums[i] 替换为 -nums[i]。输入:nums = [2,-3,-1,5,-4], k = 2。解释:选择下标 1 ,nums 变为 [4,-2,3]。输入:nums = [3,-1,0,2], k = 3。以这种方式修改数组后,返回数组 可能的最大和。输入:nums = [4,2,3], k = 1。原创 2024-04-15 13:54:08 · 384 阅读 · 0 评论 -
力扣45 跳跃游戏Ⅱ Java版本
每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。输入: nums = [2,3,1,1,4]解释: 跳到最后一个位置的最小跳跃数是 2。输入: nums = [2,3,0,1,4]题目保证可以到达 nums[n-1]原创 2024-04-14 10:20:47 · 160 阅读 · 0 评论 -
力扣55 跳跃游戏 Java版本
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标。数组中的每个元素代表你在该位置可以跳跃的最大长度。解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。判断你是否能够到达最后一个下标,如果可以,返回 true;否则,返回 false。输入:nums = [2,3,1,1,4]输入:nums = [3,2,1,0,4]原创 2024-04-14 10:20:23 · 219 阅读 · 0 评论 -
力扣122 买卖股票的最佳时机Ⅱ Java版本
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。解释:在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5 - 1 = 4。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。输入:prices = [7,1,5,3,6,4]原创 2024-04-13 11:33:46 · 272 阅读 · 0 评论 -
力扣455 分发饼干 Java版本
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。但是,每个孩子最多只能给一块饼干。虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。输入: g = [1,2,3], s = [1,1]输入: g = [1,2], s = [1,2,3]原创 2024-04-13 11:33:15 · 283 阅读 · 0 评论 -
力扣376 摆动序列 Java版本
相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8)。例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。输入:nums = [1,17,5,10,13,15,10,5,16,8]原创 2024-04-12 22:20:54 · 232 阅读 · 0 评论 -
力扣53 最大子数组和 Java版本
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。输入:nums = [-2,1,-3,4,-1,2,1,-5,4]解释:连续子数组 [4,-1,2,1] 的和最大,为 6。输入:nums = [5,4,-1,7,8]输入:nums = [1]是数组中的一个连续部分。原创 2024-04-12 22:20:07 · 398 阅读 · 0 评论 -
力扣51 N皇后 Java版本
每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。解释:如上图所示,4 皇后问题存在两个不同的解法。输出:[[“Q”]]原创 2024-04-10 10:57:18 · 758 阅读 · 0 评论 -
力扣47 全排列Ⅱ Java版本
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。输入:nums = [1,1,2]输入:nums = [1,2,3]原创 2024-04-10 10:56:57 · 154 阅读 · 0 评论 -
力扣46 全排列 Java版本
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列。你可以 按任意顺序 返回答案。输入:nums = [1,2,3]输出:[[0,1],[1,0]]nums 中的所有整数 互不相同。输入:nums = [0,1]输入:nums = [1]原创 2024-04-09 15:18:43 · 110 阅读 · 0 评论 -
力扣90 子集Ⅱ Java版本
给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的。解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]输入:nums = [1,2,2]输入:nums = [0]输出:[[],[0]]原创 2024-04-09 15:18:19 · 181 阅读 · 0 评论 -
力扣78 子集 Java版本
无论path是用ArraList还是LinkedList,最后result.add的时候都要new ArrayList,要不后面path改变的时候也会带着result改变。输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]给你一个整数数组 nums ,数组中的元素 互不相同。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。输入:nums = [1,2,3]nums 中的所有元素 互不相同。输入:nums = [0]输出:[[],[0]]原创 2024-04-08 11:01:58 · 695 阅读 · 0 评论 -
力扣491 非递减子序列 Java版本
给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素。你可以按 任意顺序 返回答案。输出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。输入:nums = [4,4,3,2,1]输入:nums = [4,6,7,7]输出:[[4,4]]原创 2024-04-08 11:01:32 · 274 阅读 · 0 评论 -
力扣131 分割回文串 Java版本
给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是。输出:[[“a”,“a”,“b”],[“aa”,“b”]]返回 s 所有可能的分割方案。输入:s = “aab”s 仅由小写英文字母组成。输入:s = “a”输出:[[“a”]]原创 2024-04-07 15:31:03 · 285 阅读 · 0 评论 -
力扣93 复原IP地址 Java版本
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “[email protected]” 是 无效 IP 地址。输出:[“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]输入:s = “101023”原创 2024-04-07 15:30:47 · 264 阅读 · 0 评论 -
力扣39 组合总和 Java版本
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。输入:candidates = [2,3,6,7], target = 7。输入: candidates = [2,3,5], target = 8。输出: [[2,2,2,2],[2,3,3],[3,5]]输出:[[2,2,3],[7]]原创 2024-04-06 14:03:56 · 366 阅读 · 0 评论 -
力扣40 组合总和Ⅱ Java版本
给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。输入: candidates = [10,1,2,7,6,1,5], target = 8,输入: candidates = [2,5,2,1,2], target = 5,candidates 中的每个数字在每个组合中只能使用 一次。注意:解集不能包含重复的组合。原创 2024-04-06 14:03:39 · 408 阅读 · 0 评论 -
力扣216 组合总和Ⅲ Java版本
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。返回 所有可能的有效组合的列表。该列表不能包含相同的组合两次,组合可以以任何顺序返回。输出: [[1,2,6], [1,3,5], [2,3,4]]输入: k = 3, n = 7。输入: k = 3, n = 9。输入: k = 4, n = 1。输出: [[1,2,4]]解释: 不存在有效的组合。每个数字 最多使用一次。没有其他符合的组合了。没有其他符合的组合了。原创 2024-04-02 20:48:12 · 230 阅读 · 0 评论 -
力扣17 电话号码的字母组合 Java版本
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。digits[i] 是范围 [‘2’, ‘9’] 的一个数字。输入:digits = “23”输出:[“a”,“b”,“c”]输入:digits = “2”输入:digits = “”原创 2024-04-02 20:47:57 · 642 阅读 · 0 评论 -
力扣538 把二叉搜索树转换为累加树 Java版本
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。原创 2024-04-01 11:09:45 · 501 阅读 · 0 评论 -
力扣77 组合 Java版本
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。输入:n = 4, k = 2。输入:n = 1, k = 1。原创 2024-04-01 11:09:22 · 309 阅读 · 0 评论 -
力扣669 修剪二叉搜索树 Java版本
通过修剪二叉搜索树,使得所有节点的值在[low, high]中。修剪树 不应该 改变保留在树中的元素的相对结构 (即,如果没有被移除,原有的父代子代关系都应当保留)。输入:root = [3,0,4,null,2,null,null,1], low = 1, high = 3。所以结果应当返回修剪好的二叉搜索树的新的根节点。输入:root = [1,0,2], low = 1, high = 2。输出:[3,2,null,1]树中每个节点的值都是 唯一 的。输出:[1,null,2]原创 2024-03-25 14:38:58 · 371 阅读 · 0 评论 -
力扣108 将有序数组转换为二叉搜索树 Java版本
给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵。解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。输入:nums = [-10,-3,0,5,9]输出:[0,-3,9,-10,null,5]nums 按 严格递增 顺序排列。输入:nums = [1,3]原创 2024-03-25 14:38:43 · 164 阅读 · 0 评论 -
力扣701 二叉搜索树中的插入操作 Java版本
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。输入:root = [4,2,7,1,3,null,null,null,null,null,null], val = 5。输入:root = [40,20,60,10,30,50,70], val = 25。输出:[40,20,60,10,30,50,70,null,null,25]输入:root = [4,2,7,1,3], val = 5。输出:[4,2,7,1,3,5]输出:[4,2,7,1,3,5]原创 2024-03-24 14:12:52 · 373 阅读 · 0 评论 -
力扣450 删除二叉搜索树中的节点 Java版本
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。输入: root = [5,3,6,2,4,null,7], key = 0。输入:root = [5,3,6,2,4,null,7], key = 3。另一个正确答案是 [5,2,6,null,4,null,7]。输出:[5,4,6,2,null,null,7]输出: [5,3,6,2,4,null,7]原创 2024-03-24 14:12:31 · 726 阅读 · 0 评论 -
力扣501 二叉搜索树中的众数 Java版本
给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。进阶:你可以不使用额外的空间吗?(假设由递归产生的隐式调用栈的开销不被计算在内)如果树中有不止一个众数,可以按 任意顺序 返回。结点左子树中所含节点的值 小于等于 当前节点的值。结点右子树中所含节点的值 大于等于 当前节点的值。输入:root = [1,null,2,2]树中节点的数目在范围 [1, 104] 内。左子树和右子树都是二叉搜索树。输入:root = [0]原创 2024-03-23 15:07:50 · 447 阅读 · 0 评论 -
力扣236 二叉树的最近公共祖先 Java版本
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。因为根据定义最近公共祖先节点可以为节点本身。输入:root = [1,2], p = 1, q = 2。原创 2024-03-23 15:07:34 · 491 阅读 · 0 评论