自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣1049 最后一块石头的重量Ⅱ Java版本

可以用0-1背包的思路来解决这个问题,当背包中所能装的石头的重量越接近所有重量的一半的时候,最后一块石头所剩的重量就越小。= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],组合 2 和 1,得到 1,所以数组转化为 [1,1,1],输入:stones = [31,26,33,21,40]输入:stones = [2,7,4,1,8,1]

2024-06-14 10:45:41 277

原创 力扣416 分割等和子集 Java版本

然后就可以考虑用0-1背包的思路来解决这个问题,这里元素的值就是当前元素的价值和重量,背包的容量就是子集元素和的一半,最终需要确定这个背包里是否能够正好装进价值为子集和一半的时候。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。找出两个子集,让这两个子集的和相等可以转化思路为:找到一个子集,这个子集的和是子集中所有元素和的一半。解释:数组可以分割成 [1, 5, 5] 和 [11]。输入:nums = [1,5,11,5]输入:nums = [1,2,3,5]

2024-06-14 09:55:36 483

原创 力扣96 不同的二叉搜索树 Java版本

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

2024-06-08 21:26:01 335

原创 卡码网 46. 携带研究材料(第六期模拟笔试)Java版本

这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。小明能够携带 6 种研究材料,但是行李空间只有 1,而占用空间为 1 的研究材料价值为 5,所以最终答案输出 5。第一行包含两个正整数,第一个整数 M 代表研究材料的种类,第二个正整数 N,代表小明的行李空间。输出一个整数,代表小明能够携带的研究材料的最大价值。

2024-06-08 21:25:30 137

原创 力扣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 345

原创 力扣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 257

原创 力扣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 410

原创 力扣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 163

原创 力扣738 单调递增的数字 Java版本

当且仅当每个相邻位数上的数字 x 和 y 满足 x

2024-05-18 15:03:37 283

原创 力扣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 227

原创 力扣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 323

原创 力扣763 划分字母区间 Java版本

像 “ababcbacadefegde”, “hijhklij” 这样的划分是错误的,因为划分的片段数较少。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。划分结果为 “ababcbaca”、“defegde”、“hijhklij”。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。输入:s = “ababcbacadefegdehijhklij”返回一个表示每个字符串片段的长度的列表。输入:s = “eccbbbbdec”输出:[9,7,8]

2024-04-18 09:06:18 612

原创 力扣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 510

原创 力扣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 498

原创 力扣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 450

原创 力扣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 382

原创 力扣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 486

原创 力扣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 398

原创 力扣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 168

原创 力扣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 233

原创 力扣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 280

原创 力扣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 295

原创 力扣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 243

原创 力扣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 415

原创 力扣51 N皇后 Java版本

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。解释:如上图所示,4 皇后问题存在两个不同的解法。输出:[[“Q”]]

2024-04-10 10:57:18 759

原创 力扣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 158

原创 力扣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 112

原创 力扣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 205

原创 力扣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 697

原创 力扣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 275

原创 力扣131 分割回文串 Java版本

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是。输出:[[“a”,“a”,“b”],[“aa”,“b”]]返回 s 所有可能的分割方案。输入:s = “aab”s 仅由小写英文字母组成。输入:s = “a”输出:[[“a”]]

2024-04-07 15:31:03 288

原创 力扣93 复原IP地址 Java版本

给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 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 274

原创 力扣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

原创 力扣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 410

原创 力扣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 242

原创 力扣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 644

原创 力扣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 509

原创 力扣77 组合 Java版本

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。输入:n = 4, k = 2。输入:n = 1, k = 1。

2024-04-01 11:09:22 315

原创 力扣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 379

原创 力扣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 167

空空如也

空空如也

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

TA关注的人

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