力扣刷题
JungleiRim
Stay hungry stay foolish.
展开
-
力扣:3132. 找出与数组相加的整数 II(Java,枚举)
移除 nums1 中下标为 [0,4] 的两个元素,并且每个元素与 -2 相加后,nums1 变为 [18,14,10] ,与 nums2 相等。移除 nums1 中下标为 [0,3] 的两个元素,并且每个元素与 2 相加后,nums1 变为 [7,7] ,与 nums2 相等。执行上述操作后,nums1 和 nums2 相等。输入:nums1 = [4,20,16,12,8], nums2 = [14,18,10]输入:nums1 = [3,5,5,3], nums2 = [7,7]原创 2024-08-09 15:20:46 · 299 阅读 · 0 评论 -
解题思考:为什么Java中使用Arrays.stream()创建流处理数组通常会增加开销,提高时间复杂度?
在流中,编译器不能像对待简单的 for 循环那样进行某些特定的优化,例如循环展开(loop unrolling)或向量化(vectorization)。因此,对于一些简单的操作,手动实现的循环可能会比流更高效。虽然这种惰性求值机制可以带来某些情况下的性能优化,但它也意味着流的处理过程中可能需要进行多次遍历,增加了开销。总的来说,尽管流提供了一种优雅、简洁的方式来处理集合,但在性能敏感的场合下,尤其是处理简单的数组操作时,传统的循环可能会更高效。时,使用传统遍历会比创建流处理数组的时间复杂度更低。原创 2024-08-08 10:42:12 · 395 阅读 · 0 评论 -
力扣:LCR 021. 删除链表的倒数第 N 个结点(Java)
给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2。输入:head = [1], n = 1。输出:[1,2,3,5]原创 2024-08-07 11:14:02 · 286 阅读 · 0 评论 -
24. 两两交换链表中的节点(Java)
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。输入:head = [1,2,3,4]输出:[2,1,4,3]原创 2024-08-06 16:40:45 · 243 阅读 · 0 评论 -
力扣:100379. 新增道路查询后的最短距离 I(Java,BFS)
返回一个数组 answer,对于范围 [0, queries.length - 1] 中的每个 i,answer[i] 是处理完前 i + 1 个查询后,从城市 0 到城市 n - 1 的最短路径的长度。输入: n = 5, queries = [[2, 4], [0, 2], [0, 4]]新增一条从 2 到 4 的道路后,从 0 到 4 的最短路径长度为 3。新增一条从 0 到 2 的道路后,从 0 到 4 的最短路径长度为 2。新增一条从 0 到 4 的道路后,从 0 到 4 的最短路径长度为 1。原创 2024-08-04 21:56:06 · 284 阅读 · 0 评论 -
力扣:3128. 直角三角形(Java)
如果 grid 中 3 个元素满足:一个元素与另一个元素在 同一行,同时与第三个元素在 同一列 ,那么这 3 个元素称为一个 直角三角形。这 3 个元素互相之间不需要相邻。请你返回使用 grid 中的 3 个元素可以构建的 直角三角形 数目,且满足 3 个元素值 都 为 1。输入:grid = [[0,1,0],[0,1,1],[0,1,0]]给你一个二维 boolean 矩阵 grid。有 2 个直角三角形。原创 2024-08-02 16:43:34 · 437 阅读 · 0 评论 -
力扣:2961. 双模幂运算(Java,快速幂取模)
给你一个下标从 0 开始的二维数组 variables ,其中 variables[i] = [ai, bi, ci, mi],以及一个整数 target。输入:variables = [[2,3,3,10],[3,3,3,1],[6,1,1,4]], target = 2。输入:variables = [[39,3,1000,1000]], target = 17。原创 2024-07-30 15:48:03 · 312 阅读 · 0 评论 -
力扣:LCR 024. 反转链表(Java)
给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。输入:head = [1,2,3,4,5]输入:head = [1,2]输出:[5,4,3,2,1]原创 2024-07-01 20:24:25 · 319 阅读 · 0 评论 -
力扣:3195. 包含所有 1 的最小矩形面积 I(Java)
给你一个二维 二进制 数组 grid。请你找出一个边在水平方向和竖直方向上、面积 最小 的矩形,并且满足 grid 中所有的 1 都在矩形的内部。这个最小矩形的高度为 2,宽度为 3,因此面积为 2 * 3 = 6。这个最小矩形的高度和宽度都是 1,因此面积为 1 * 1 = 1。输入: grid = [[0,1,0],[1,0,1]]输入: grid = [[0,0],[1,0]]返回这个矩形可能的 最小 面积。原创 2024-06-30 10:24:03 · 249 阅读 · 0 评论 -
力扣:707. 设计链表(Java)
单链表中的节点应该具备两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果是双向链表,则还需要属性 prev 以指示链表中的上一个节点。// 链表变为 1->2->3。// 现在,链表变为 1->3。你可以选择使用单链表或者双链表,设计并实现自己的链表。原创 2024-06-30 01:02:13 · 389 阅读 · 0 评论 -
力扣:203. 移除链表元素(Java)
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。输入:head = [1,2,6,3,4,5,6], val = 6。输入:head = [], val = 1。输出:[1,2,3,4,5]原创 2024-06-27 20:43:55 · 300 阅读 · 0 评论 -
力扣:59. 螺旋矩阵 II(Java,模拟)
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix。输出:[[1,2,3],[8,9,4],[7,6,5]]原创 2024-06-26 23:01:43 · 564 阅读 · 0 评论 -
力扣:3040. 相同分数的最大操作数目 II(Java,动态规划)
在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。选择 nums 中第一个和最后一个元素并且删除它们。请你返回按照上述要求 最多 可以进行的操作次数。选择 nums 中最前面两个元素并且删除它们。输入:nums = [3,2,1,2,3,4]选择 nums 中最后两个元素并且删除它们。输入:nums = [3,2,6,1,4]一次操作的 分数 是被删除元素的和。原创 2024-06-08 16:46:45 · 361 阅读 · 0 评论 -
力扣:209. 长度最小的子数组(Java,双指针,滑动窗口)
numsl, numsl+1, …, numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。输入:target = 7, nums = [2,3,1,2,4,3]给定一个含有 n 个正整数的数组和一个正整数 target。找出该数组中满足其总和大于等于 target 的长度最小的。输入:target = 4, nums = [1,4,4]解释:子数组 [4,3] 是该条件下的长度最小的子数组。原创 2024-06-07 00:00:46 · 273 阅读 · 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-05-30 10:31:09 · 194 阅读 · 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-05-29 20:05:54 · 258 阅读 · 0 评论 -
力扣:121. 买卖股票的最佳时机(Java,动态规划)
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;解释:在这种情况下, 没有交易完成, 所以最大利润为 0。输入:prices = [7,6,4,3,1]输入:[7,1,5,3,6,4]原创 2024-05-26 14:37:55 · 279 阅读 · 0 评论 -
力扣:LCR 038. 每日温度(Java,单调栈)
请根据每日 气温 列表 temperatures ,重新生成一个列表,要求其对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。输入: temperatures = [73,74,75,71,69,72,76,73]输入: temperatures = [30,40,50,60]输入: temperatures = [30,60,90]输出: [1,1,4,2,1,1,0,0]输出: [1,1,1,0]输出: [1,1,0]原创 2024-05-24 10:38:56 · 206 阅读 · 0 评论 -
力扣:92. 反转链表 II(Java)
给你单链表的头指针 head 和两个整数 left 和 right ,其中 left原创 2024-05-20 23:01:54 · 342 阅读 · 0 评论 -
力扣:48. 旋转图像(Java)
你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。原创 2024-05-12 12:14:28 · 280 阅读 · 0 评论 -
力扣:204. 计数质数(Java)
解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7。给定整数 n ,返回 所有小于非负整数 n 的质数的数量。原创 2024-05-10 08:51:51 · 205 阅读 · 1 评论 -
力扣:31. 下一个排列(Java,双指针)
如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1]。而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。类似地,arr = [2,3,1] 的下一个排列是 [3,1,2]。例如,arr = [1,2,3] 的下一个排列是 [1,3,2]。输出:[1,3,2]原创 2024-05-09 13:34:38 · 151 阅读 · 0 评论 -
力扣:268. 丢失的数字(Java)
解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。输入:nums = [3,0,1]输入:nums = [0,1]原创 2024-05-08 12:07:31 · 326 阅读 · 0 评论 -
力扣:300. 最长递增子序列(Java,动态规划)
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。解释:最长递增子序列是 [2,3,7,101],因此长度为 4。给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。输入:nums = [10,9,2,5,3,7,101,18]输入:nums = [0,1,0,3,2,3]原创 2024-05-07 14:33:09 · 337 阅读 · 0 评论 -
力扣:416. 分割等和子集(Java,动态规划:01背包问题)
给你一个 只包含正整数 的 非空 数组 nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。解释:数组可以分割成 [1, 5, 5] 和 [11]。解释:数组不能分割成两个元素和相等的子集。输入:nums = [1,5,11,5]输入:nums = [1,2,3,5]原创 2024-05-06 14:29:16 · 347 阅读 · 2 评论 -
力扣:100275. K 周期字符串需要的最少操作次数(Java)
在一次操作中,你可以选择任意两个下标 i 和 j,其中 0原创 2024-05-05 14:09:44 · 744 阅读 · 1 评论 -
力扣:100284. 有效单词(Java)
给你一个字符串 word。如果 word 是一个有效单词,则返回 true ,否则返回 false。‘a’、‘e’、‘i’、‘o’、‘u’ 及其大写形式都属于 元音字母。由数字 0-9 和英文大小写字母组成。(不必包含所有这类字符。英文中的 辅音字母 是指那些除元音字母之外的字母。至少 包含一个 元音字母。至少 包含一个 辅音字母。至少 包含 3 个字符。这个单词满足所有条件。原创 2024-05-05 13:59:56 · 292 阅读 · 1 评论 -
力扣:198.打家劫舍(Java,动态规划)
你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4。原创 2024-05-04 11:24:22 · 319 阅读 · 0 评论 -
力扣:289. 生命游戏(Java)
每个细胞都具有一个初始状态: 1 即为 活细胞 (live),或 0 即为 死细胞 (dead)。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。2.如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;1.如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;3.如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;4.如果死细胞周围正好有三个活细胞,则该位置死细胞复活;原创 2024-05-03 10:31:40 · 293 阅读 · 0 评论 -
力扣:1979. 找出数组的最大公约数(Java)
给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数。两个数的 最大公约数 是能够被两个数整除的最大正整数。2 和 10 的最大公约数是 2。nums 中最大的数是 10。nums 中最小的数是 2。原创 2024-05-02 15:45:40 · 360 阅读 · 1 评论 -
力扣:100. 相同的树(Java)
给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。原创 2024-05-01 14:14:27 · 364 阅读 · 1 评论 -
力扣:61. 旋转链表(Java,双指针)
给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。原创 2024-04-30 15:40:12 · 563 阅读 · 1 评论 -
力扣:187. 重复的DNA序列(Java)
给定一个表示 DNA序列 的字符串 s ,返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。DNA序列 由一系列核苷酸组成,缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。在研究 DNA 时,识别 DNA 中的重复序列非常有用。例如,“ACGAATTCCG” 是一个 DNA序列。原创 2024-04-28 11:09:34 · 181 阅读 · 0 评论 -
力扣:215. 数组中的第K个最大元素(Java,快速排序)
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。排序只需要两行代码可以搞定。原创 2024-04-27 17:12:00 · 218 阅读 · 1 评论 -
力扣:387. 字符串中的第一个唯一字符(Java)
给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。原创 2024-04-26 19:45:40 · 173 阅读 · 0 评论 -
力扣:82. 删除排序链表中的重复元素 II(Java)
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字。返回 已排序的链表。原创 2024-04-25 10:04:12 · 264 阅读 · 1 评论 -
力扣:104. 二叉树的最大深度(Java,DFS,BFS)
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。给定一个二叉树 root ,返回其最大深度。原创 2024-04-20 20:37:57 · 445 阅读 · 1 评论 -
力扣:15. 三数之和(Java)
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。请你返回所有和为 0 且不重复的三元组。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。注意,输出的顺序和三元组的顺序并不重要。原创 2024-04-19 10:32:34 · 448 阅读 · 0 评论 -
11.盛最多水的容器(Java,双指针)
给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。原创 2024-04-16 14:02:31 · 263 阅读 · 0 评论 -
167. 两数之和 II - 输入有序数组(Java)
给你一个下标从 1 开始的整数数组 numbers ,该数组已按 非递减顺序排列 ,请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] ,则 1原创 2024-04-10 19:52:45 · 492 阅读 · 0 评论