
leetcode-中等
xushiyu1996818
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode-063-不同路径2
否则网格 (i,j) 可以从网格 (i−1,j) 或者 网格 (i,j−1) 走过来,因此走到该格子的方法数为走到网格 (i - 1, j) 和网格 (i, j - 1)的方法数之和,即 dp[i, j] = dp[i - 1, j] + dp[i, j - 1]。第 1 行的格子只有从其左边格子走过去这一种走法,因此初始化 dp[0][j] 值为 1,存在障碍物时为 0。如果网格 (i,j) 上有障碍物,则 dp[i][j] 值为 0,表示走到该格子的方法数为 0;解法1(成功,0ms,极快)原创 2023-07-02 22:01:40 · 801 阅读 · 0 评论 -
leetcode-061-旋转链表
然后再向后移动到null,得到rightTail。然后rigthtail.next指向head,leftTail.next指向null即可。先获取链表的长度,然后从头部移动length-k-1次,得到head,leftTail,rightHead,解法1(成功,0ms,极快)原创 2023-07-02 21:49:51 · 633 阅读 · 0 评论 -
leetcode-059-螺旋矩阵2
如果 left<right 且 top<bottom,则从右到左填入下侧元素,依次为 (bottom,right−1) 到 (bottom,left+1),以及从下到上填入左侧元素,依次为 (bottom,left) 到 (top+1,left)。填完当前层的元素之后,将 left 和 top 分别增加 1,将 right 和 bottom 分别减少 1,进入下一层继续填入元素,直到填完所有元素为止。可以将矩阵看成若干层,首先填入矩阵最外层的元素,其次填入矩阵次外层的元素,直到填入矩阵最内层的元素。原创 2023-06-10 20:13:47 · 707 阅读 · 0 评论 -
leetcode-057-插入区间
然后,再看右边,这里有个情况,就是 当intervals[i][0] > newInterval[1]说明newInterval没有和任何区间重合,比如intervals = [[1,3],[6,9]], newInterval = [4,5],直接插入即可.首先,左边,当newInterval[0] > intervals[i][1]说明没有和该区间没有重叠部分,继续遍历下一个区间,比如intervals = [[1,3],[6,9]], newInterval = [2,5]下面就要考虑重叠情况了。原创 2023-06-08 23:54:07 · 487 阅读 · 0 评论 -
leetcode-047-全排列2
但是这个相等条件有两种可能 一种是,1 1‘ 2,也就是选择完1之后再选择第二个1,两个元素虽然重复,但是第二个元素是前一个元素的下一层,这时是没有问题的。另一种是之前的 同层 分支已经有 1 1‘ 2了,这次的选择是 1‘ 1 2。那就说明是重复分支。具体区分的办法是 nums[i-1] 的used状态是被选择的,那么说明当前的nums[i] 是 nums[i-1]的下一层路径。否则如果 nums[i-1] 的状态是没被选择的,那么说明当前 的nums[i] 是nums[i-1] 同层路径。原创 2023-05-20 16:45:55 · 131 阅读 · 0 评论 -
leetcode-045-跳跃游戏2
以此类推,不断地在到达当前步的边界 end 前更新下一步能够到达的最远距离nextMaxEnd 作为下一步的边界,更新途中一旦到达当前步的边界 end,就表示当前步已经贪心地走完了,必须跳下一步了,step++,并且下一步能够到达的最远边界我们已经在之前比较出来了,直接更新即可:end = nextMaxEnd。到这里,其实就可以明白为什么不用遍历终点了,因为边界 end 有可能是终点,那 end 一旦到了终点其实也就到了,但是我们的代码逻辑是到达 end 就得步数加一,其实这是没必要的。原创 2023-05-14 14:51:59 · 158 阅读 · 0 评论 -
leetcode-043-字符串相乘
如果num 1和num 2都不是0,则可以通过模拟「竖式乘法」的方法计算乘积。从右往左遍历乘数,将乘数的每一位与被乘数相乘得到对应的结果,再将每次得到的结果累加。这道题中,被乘数是num 1,乘数是num 2。num1[i] x num2[j] 的结果为 tmp(位数为两位,"0x""0x", "xy""xy" 的形式),其第一位位于 res[i+j],第二位位于 res[i+j+1]。该算法是通过两数相乘时,乘数某位与被乘数某位相乘,与产生结果的位置的规律来完成。需要注意的是,num 2。原创 2023-05-14 11:37:17 · 113 阅读 · 0 评论 -
leetcode-040-组合总和2
很容易想到的方案是:先对数组 升序 排序,重复的元素一定不是排好序以后相同的连续数组区域的第 11 个元素。也就是说,剪枝发生在:同一层数值相同的结点第 22、33 ... 个结点,因为数值相同的第 11 个结点已经搜索出了包含了这个数值的全部结果,同一层的其它结点,候选数的个数更少,搜索出的结果一定不会比第 11 个结点更多,并且是第 11 个结点的子集。这里我们使用和第 39 题和第 15 题(三数之和)类似的思路:不重复就需要按 顺序 搜索, 在搜索的过程中检测分支是否会出现重复结果。原创 2023-05-08 22:48:19 · 723 阅读 · 0 评论 -
leetcode-024-两两交换链表中的节点
用 head 表示原始链表的头节点,新的链表的第二个节点,用 newHead 表示新的链表的头节点,原始链表的第二个节点,则原始链表中的其余节点的头节点是 newHead.next。如果链表中至少有两个节点,则在两两交换链表中的节点之后,原始链表的头节点变成新的链表的第二个节点,原始链表的第二个节点变成新的链表的头节点。两两交换链表中的节点之后,新的链表的头节点是 dummyHead.next,返回新的链表的头节点即可。将链表根据节点的位置分成链表1和链表2,原来的变成12121,然后再合并,2121。原创 2023-05-02 01:43:30 · 705 阅读 · 0 评论 -
leetcode-018-四数之和
在确定第一个数之后,如果 nums[i]+nums[n−3]+nums[n−2]+nums[n−1]<target,说明此时剩下的三个数无论取什么值,四数之和一定小于 target,因此第一重循环直接进入下一轮,枚举 \textit{nums}[i+1]nums[i+1];在确定前两个数之后,如果 nums[i]+nums[j]+nums[n−2]+nums[n−1]<target,说明此时剩下的两个数无论取什么值,四数之和一定小于 target,因此第二重循环直接进入下一轮,枚举 nums[j+1]。原创 2023-05-01 12:54:58 · 694 阅读 · 0 评论 -
leetcode-016-最接近的三数之和
同时判断 sum 与 target 的大小关系,因为数组有序,如果 sum > target 则 end--,如果 sum < target 则 start++,如果 sum == target 则说明距离为 0 直接返回结果。根据 sum = nums[i] + nums[start] + nums[end] 的结果,判断 sum 与目标 target 的距离,如果更近则更新结果 ans。在数组 nums 中,进行遍历,每遍历一个值利用其下标i,形成一个固定值 nums[i]原创 2023-04-25 21:28:13 · 135 阅读 · 0 评论 -
leetcode-012-整数转罗马数字
这个思路相对比较简单,因为题目中说输入在 1 ~3999 的范围内,所以我们把 1 到 9,10 到 90,100 到 900,1000 到 3000 对应的罗马数字都表示出来,最后对于任何输入,我们要做的就是把找到的罗马数字组合起来即可。比如输入是 2359,我们找到 2000,300,50,9 对应的罗马数字为 MM,CCC,L,IX,组合后得到结果为 MMCCCLIX。然后根据算法,将1,5,10对应的char拼接成对应的字符串。1994,这样,每位分别处理,1000,900,90,4。原创 2023-04-23 22:56:20 · 114 阅读 · 0 评论 -
leetcode-006-N 字形变换
对于其他行:两个公差为 2 * (n − 1) 的等差数列交替排列,首项分别是 i 和 2 * n − i − 2。解决方案为:模拟这个行索引的变化,在遍历 s 中把每个字符填到正确的行 res[i]。对于第一行和最后一行:公差为 2 * (n − 1) 的等差数列,首项是 i。对于本题,我们可以不失一般性的将规律推导为「首项」和「公差公式」。res[i] += c: 把每个字符 c 填入对应行 s_is。i += flag: 更新当前字符 c 对应的行索引;解法1(成功,7ms,较快)原创 2023-04-19 22:38:00 · 531 阅读 · 0 评论 -
leetcode-739-每日温度-java
题目及测试package pid739;/*739. 每日温度请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30原创 2020-10-22 16:27:00 · 334 阅读 · 0 评论 -
leetcode-647-回文子串-java
题目及测试package pid647;/* 647. 回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。 示例 1:输入:"abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:"aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa" 提示: 输入的字符串长度不会超过 100原创 2020-10-19 13:30:42 · 230 阅读 · 0 评论 -
leetcode-581-最短无序连续子数组-java
题目及测试package pid581;/*581. 最短无序连续子数组给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。你找到的子数组应是最短的,请输出它的长度。示例 1:输入: [2, 6, 4, 8, 10, 9, 15]输出: 5解释: 你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。说明 : 输入的数组长度范围在 [1, 10,000]。 输入的数组可能原创 2020-10-10 10:58:21 · 265 阅读 · 0 评论 -
leetcode-560-和为K的子数组-java
题目及测试package pid560;/*560. 和为K的子数组给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数。示例 1 :输入:nums = [1,1,1], k = 2输出: 2 , [1,1] 与 [1,1] 为两种不同的情况。说明 : 数组的长度为 [1, 20,000]。 数组中元素的范围是 [-1000, 1000] ,且整数 k 的范围是 [-1e7, 1e7]。*/public class main原创 2020-09-30 10:06:57 · 283 阅读 · 0 评论 -
leetcode-538-把二叉搜索树转换为累加树-java
题目及测试package pid538;/*538. 把二叉搜索树转换为累加树给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。提醒一下,二叉搜索树满足下列约束条件: 节点的左子树仅包含键 小于 节点键的节点。 节点的右子树仅包含键 大于 节点键的节点。 左右子树也必须是二叉搜索树。注意:本题和 1038: https://le原创 2020-09-28 09:57:57 · 184 阅读 · 0 评论 -
leetcode-494-目标和-java
题目及测试package pid494;/*494. 目标和给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。 示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1原创 2020-09-27 15:22:27 · 179 阅读 · 0 评论 -
leetcode-438-找到字符串中所有字母异位词-java
题目及测试package pid438;/*438. 找到字符串中所有字母异位词给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100。说明: 字母异位词指字母相同,但排列不同的字符串。 不考虑答案输出的顺序。示例 1:输入:s: "cbaebabacd" p: "abc"输出:[0, 6]解释:起始索引等于 0 的子原创 2020-08-31 14:55:13 · 244 阅读 · 0 评论 -
leetcode-437-路径总和 III-java
题目及测试package pid437;/* 437. 路径总和 III给定一个二叉树,它的每个结点都存放着一个整数值。找出路径和等于给定数值的路径总数。路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。二叉树不超过1000个节点,且节点数值范围是 [-1000000,1000000] 的整数。示例:root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10原创 2020-08-30 15:28:43 · 178 阅读 · 0 评论 -
leetcode-416-分割等和子集-java
题目及测试package pid416;/*416. 分割等和子集给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11]. 示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等原创 2020-08-19 15:02:08 · 415 阅读 · 0 评论 -
leetcode-399-除法求值-java
题目及测试package pid399;/* 399. 除法求值给出方程式 A / B = k, 其中 A 和 B 均为用字符串表示的变量, k 是一个浮点型数字。根据已知方程式求解问题,并返回计算结果。如果结果不存在,则返回 -1.0。示例 :给定 a / b = 2.0, b / c = 3.0问题: a / c = ?, b / a = ?, a / e = ?, a / a = ?, x / x = ? 返回 [6.0, 0.5, -1.0, 1.0, -1.0 ]输入为原创 2020-08-18 14:20:27 · 332 阅读 · 0 评论 -
leetcode-394-字符串解码-java
题目及测试package pid394;/*394. 字符串解码给定一个经过编码的字符串,返回它解码后的字符串。编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。 示例 1:原创 2020-08-13 11:39:50 · 362 阅读 · 0 评论 -
leetcode-338-比特位计数-java
题目及测试package pid338;/* 338. 比特位计数给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。示例 1:输入: 2输出: [0,1,1] 0 01 10示例 2:输入: 5输出: [0,1,1,2,1,2] 0 01 10 11 100 101 110 111进阶: 给出时间复杂度为O(n*sizeof(integer))的解答原创 2020-08-12 11:38:36 · 212 阅读 · 0 评论 -
leetcode-337-打家劫舍 III-java
题目及测试package pid337;/*337. 打家劫舍 III在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,nul原创 2020-08-11 14:49:14 · 282 阅读 · 0 评论 -
leetcode-221-最大正方形-java
题目及测试package pid221;/* 221. 最大正方形在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4*/import java.util.List;public class main { public static void main(String[] args) { char[][] testTabl原创 2020-08-07 16:46:16 · 327 阅读 · 0 评论 -
leetcode-142-环形链表 II-java
题目及测试package pid142;/* 142. 环形链表 II给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。https://leetcode-cn.com/problems/linked-list-cycle-ii/示例 1:输入:head = [3,2,0,-4]原创 2020-08-05 15:54:03 · 277 阅读 · 0 评论 -
leetcode-114-二叉树展开为链表-java
题目及测试package pid114;/*114. 二叉树展开为链表给定一个二叉树,原地将它展开为一个单链表。 例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6*/public class main { public static void main原创 2020-08-04 10:48:39 · 313 阅读 · 0 评论 -
leetcode-96-不同的二叉搜索树-java
题目及测试package pid096;/*96. 不同的二叉搜索树给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \原创 2020-08-03 11:38:49 · 248 阅读 · 0 评论 -
leetcode-64- 最小路径和-java
题目及测试package pid064;/*64. 最小路径和给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。*/import java.util.List;public class main { public static原创 2020-07-29 10:18:52 · 244 阅读 · 0 评论 -
leetcode-39-组合总和-java
题目及测试package pid039;/* 39. 组合总和给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明: 所有数字(包括 target)都是正整数。 解集不能包含重复的组合。 示例 1:输入:candidates = [2,3,6,7], target = 7,所求解集为:[ [7],原创 2020-07-28 14:25:04 · 272 阅读 · 0 评论 -
leetcode-31-下一个排列-java
题目及测试package pid031;/*31. 下一个排列实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,3 123 132 213 231 312 3211,1,5 → 1,5,11234 1243 1324 1342原创 2020-07-22 14:17:29 · 256 阅读 · 0 评论 -
leetcode-380-常数时间插入、删除和获取随机元素(Insert Delete GetRandom O(1))-java
题目及测试package pid381;/* Insert Delete GetRandom O(1)设计一个支持在平均 时间复杂度 O(1) 下,执行以下操作的数据结构。 insert(val):当元素 val 不存在时,向集合中插入该项。 remove(val):元素 val 存在时,从集合中移除该项。 getRandom:随机返回现有集合中的一项。每个元...原创 2019-01-17 10:18:36 · 1028 阅读 · 0 评论 -
leetcode-371-两整数之和(sum of two integers)-java
题目及测试package pid371;/*两整数之和不使用运算符 + 和 - ,计算两整数 a 、b 之和。示例 1:输入: a = 1, b = 2输出: 3示例 2:输入: a = -2, b = 3输出: 1*/public class main { public static void main(...原创 2019-01-29 13:30:43 · 208 阅读 · 0 评论 -
leetcode-150- 逆波兰表达式求值(evaluate reverse polish notation)-java
题目及测试package pid150;/*逆波兰表达式求值根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明: 整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: ["2", "1", "+"...原创 2019-01-30 09:57:39 · 376 阅读 · 0 评论 -
leetcode-169-求众数 (majority element)-java
题目及测试package pid169;/*求众数给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2*/public class main { ...原创 2019-01-31 11:25:11 · 272 阅读 · 0 评论 -
leetcode-56-合并区间(merge intervals)-java
题目合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被...原创 2019-01-08 13:50:39 · 557 阅读 · 0 评论 -
leetcode-69-x 的平方根(sqrt(t))-java
题目及测试package pid069;/*x 的平方根实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将...原创 2019-01-24 10:47:17 · 486 阅读 · 0 评论 -
leetcode-160- 相交链表(intersection of two linked list)-java
题目及测试package pid160;/* 相交链表编写一个程序,找到两个单链表相交的起始节点。 例如,下面的两个链表:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → ...原创 2018-11-13 11:32:48 · 328 阅读 · 0 评论