自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Leetcode 45-跳跃游戏 II

当前覆盖范围内尽选可到达最远的一步,如果还没到终点,步数再加一。一步尽可能多走,从而达到最少步数。

2024-09-25 17:04:08 160

转载 Leetcode 78-子集

给你一个整数数组 nums ,数组中的元素 互不相同。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。

2024-09-19 20:25:22 52

原创 Leetcode 93-复原 IP 地址

有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s 中插入 ‘.’ 来形成。

2024-09-19 19:39:54 655

原创 Leetcode 669-修剪二叉搜索树

因为如果root不满足条件则root.right或者left可以一并删除,所以选择前序遍历。

2024-09-11 22:30:51 335

原创 Leetcode 701-二叉搜索树中的插入操作

给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。返回插入后二叉搜索树的根节点。输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。你可以返回 任意有效的结果。

2024-09-11 18:47:50 384

原创 Leetcode 236-二叉树的最近公共祖先

同剑指offer 68-II 二叉树的最近公共祖先/lcr 194。

2024-09-09 13:07:13 1070

原创 Leetcode 700-二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。返回以该节点为根的子树。如果节点不存在,则返回 null。

2024-09-06 12:35:11 266

原创 Leetcode 112-路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。如果存在,返回 true;否则,返回 false。叶子节点 是指没有子节点的节点。

2024-09-01 13:02:00 576

原创 Leetcode 404-左叶子之和

确定递归函数的参数和返回值判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int,使用题目中给出的函数就可以了。确定终止条件如果遍历到空节点,那么左叶子值一定是0确定单层递归的逻辑当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。代码中left为什么要分两块计算而right不用?

2024-08-31 18:35:33 530 2

原创 Leetcode 257-二叉树的所有路径

遍历完左子树,构建出合格的路径,加入解集,遍历右子树之前,路径要撤销最末尾的选择,如果path用的是数组,就会弹出最后一项。这里用的字符串,保存了当前节点的路径,s+=root.val+"->"会创建一个新的字符串。递归右子树时,传入它即可,因为它不包含在递归左子树所拼接的东西。

2024-08-31 17:45:45 811

原创 Leetcode 111-二叉树的最小深度

这一题不能参考二叉树的最大深度直接比较Math.min(minDepth(root.left),minDepth(root.right)),因为可能左子树为空,右子树不为空,此时root不为叶节点。只有当一个节点的左右孩子都为空该节点才为叶节点。

2024-08-29 10:55:50 292

原创 Leetcode 1047-删除字符串中的所有相邻重复项

给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

2024-08-27 18:43:48 202 1

原创 Leetcode 225-用队列实现栈

【代码】Leetcode 225-用队列实现栈。

2024-08-27 16:31:03 108

转载 Leetcode 541-反转字符串 II

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符少于 k 个,则将剩余字符全部反转。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

2024-08-26 16:14:23 24 1

原创 Leetcode 18-四数之和

/不要判断nums[k] > target 就返回了,三数之和 可以通过 nums[i] > 0 就返回了,因为 0 已经是确定的数了,四数之和这道题目 target是任意值。比如:数组是[-4, -3, -2, -1],target是-10,不能因为-4 > -10而跳过。但是我们依旧可以去做剪枝,逻辑变成nums[i] > target && (nums[i] >=0 || target >= 0)就可以了。//多判断b>a+1是为了避免在[2,2,2,2,2],target=8时没有输出。

2024-08-26 00:36:54 442

原创 Leetcode 377-组合总和 Ⅳ

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。题目数据保证答案符合 32 位整数范围。题解本题为排列问题排列问题和组合问题区别参考零钱兑换问题II//只用求个数不用求具体的组合,用dp(完全背包(排列数))//排列数:容量在外,遍历顺序从低到高 物品在内,遍历顺序从低到高//1.定义:dp[j]:总和为target的排列总数//2.动态转移方程 dp[j]+=dp[j-nums[i]]

2022-05-18 15:12:04 372 1

原创 Leetcode 474-一和零

给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。题解1.动态规划法题解可参考liweiwei1419题解可参考代码随想录动态规划:背包问题若用递归,则递归中的取字符串和不取就对应于背包问题中的拿物品和不拿物品1.dp[i][j][k]:取了前i个字符串后最多取得j个0和k个1的最大的子集的个数 dp=new

2022-05-11 18:25:30 279

原创 Leetcode 1049-最后一块石头的重量 II

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0。题解题解可参考代码随想录//思路:

2022-05-10 17:27:29 273

原创 Leetcode 583-两个字符串的删除操作

注意初始化和状态转移方程式class Solution { //1.dp[i][j]:使得word1[0:i-1]和word2[0:j-1]相同的操作 //2.word1[i-1]==word2[j-1] dp[i][j]=dp[i-1][j-1] //word1[i]-1!=word2[j-1] dp[i][j]=Math.min(dp[i-1][j]+1,dp[i-1][j-1]+2,dp[i][j-1])(删word1(word1[i-2]==word2[j-1]),两个都删

2022-04-20 22:21:26 379

原创 Leetcode 392-判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?题解题解可参考代码随想录本题与Leetcode52最长回文子串的区别在于如果s[i]!=s[j] dp[i]

2022-04-19 22:22:47 103

原创 Leetcode 647-回文子串

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。题解完整题解可参考代码随想录动态规划步骤:1.确定dp[i][j]含义:字符串s[i:j]是否为回文字符串2. 动态转移方程:如果s[i]=s[j],才可能为回文串,继续判断j-i的长度(1)如果 j-i == 0 字符串长度为1,为回文(2)

2022-04-19 22:10:42 214

转载 Leetcode 49-字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。题解1.将不同的字符串转换为字符数组并按照字母顺序进行排序2.异位词排序后的结果相同,故可以作为哈希表的key值3.将字母异位词组成的集合作为哈希表的value值class Solution { //将每个词进行排序,然后将排序后的字符串在哈希表中查找,若不存在,则存入hash表作为key,value是List类型,存

2022-04-18 22:23:07 91

原创 Leetcode 454-四数相加 II

给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i, j, k, l < nnums1[i] + nums2[j] + nums3[k] + nums4[l] == 0题解看到形如:A+B…+N=0的式子,要转换为(A+…T)=-((T+1)…+N)再计算,这个T的分割点一般是一半,特殊情况下需要自行判断。定T是解题的关键。此外,可以考虑用到哈希表注意本题与Leetcode

2022-04-18 22:17:02 179

转载 Leetcode 202-快乐数

编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。如果 n 是 快乐数 就返回 true ;不是,则返回 false 。题解涉及到无限循环可以考虑哈希表(若数字之前出现过则使用哈希)或快慢指针(判断是否有环)法一 哈希表题解参考编程文青李狗蛋这道题我是怎么知道可以用哈希解决呢?重点是在“无

2022-04-17 22:22:52 381

转载 Leetcode 977-有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。题解题解转载自代码随想录做数组相关的题时,可以考虑双指针(数组有一定顺序)、哈希表(设计数组位置)、单调栈(涉及数组逆序)双指针法数组其实是有序的, 只不过负数平方之后可能成为最大数了。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。此时可以考虑双指针法了,i指向起始位置,j指向终止位置。定义一个新数组result,和A数组一样的大小,让k指向resul

2022-04-17 18:30:51 102

转载 Leetcode 27-移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。题解法一 快慢指针(拷贝覆盖)双指针,快指针(i)每轮右移一步,慢指针(ans)代表有效的数字下标,只在nums[i]!=val时右移,并将nums[i]的值赋给nums[ans]题解转载自画手大鹏标签:拷贝覆盖主要思路是遍历数组 nums

2022-04-15 22:20:49 87

转载 Leetcode 990-等式方程的可满足性

给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:“a==b” 或 “a!=b”。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。题解思路引入题解转载自笨猪爆破组如果事物 a 和 b 有共同点,可以把它们划分到同一集合,同一类。规定:把同一个类的 a、b 看作是相连的节点,不相连的节点不是一类。现在

2022-04-15 11:39:54 150

转载 Leetcode 38-外观数列

给定一个正整数 n ,输出外观数列的第 n 项。「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。你可以将其视作是由递归公式定义的数字字符串序列:countAndSay(1) = “1”countAndSay(n) 是对 countAndSay(n-1) 的描述,然后转换成另一个数字字符串。前五项如下:要 描述 一个数字字符串,首先要将字符串分割为 最小 数量的组,每个组都由连续的最多 相同字符 组成。然后对于每个组,先描述字符的数量,然后描述字符,形成一个描述组

2022-04-14 22:07:41 208

原创 Leetcode 24-两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。题解题目链接思想:递归两两翻转链表1.链表末端特殊处理:考虑head==null或者head.next == null 的情况2.交换以head为首的两个节点3.递归交换后序节点,注意避免空指针异常的情况class Solution { public ListNode swapPairs(ListNode head) { //1.链表末端

2022-04-14 21:56:37 502

转载 Leetcode 50-Pow(x, n)

实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn )。题解题解转载自编程文青李狗蛋本题很容易让人想到x^n= x^ n/2 *x^ n/2这个操作,但是如何从底到上以及终止条件是什么呢?这时候就可以用到分治(一种递归),自底向下的分解问题,求解,并向上合并分治算法由“分”和“治”两部分组成,但是它主要包括 3 个过程:划分(Divide)求解(Conquer)合并(Combine)其中:划分(Divide):将原问题划分为规模较小的子问题,子问题相互独立,与原问题形式

2022-04-07 22:30:40 171

转载 Leetcode 41-缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。题解方法:将数组视为哈希表/*思路③、使用座位交换法 根据思路② 可知,缺失的第一个整数是 [1, len + 1] 之间, 那么我们可以遍历数组,然后将对应的数据填充到对应的位置上去,比如 1 就填充到 nums[0] 的位置, 2 就填充到 nums[1] 如果填充过程中, nums[i] < 1 &

2022-04-07 09:05:10 166

转载 Leetcode 402-移掉 K 位数字

给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。题解(贪心+单调栈)前后数字逆序,并且要删除若干个数字可以考虑单调栈题解转载自Leetcode官方对于两个相同长度的数字序列,最左边不同的数字决定了这两个数字的大小, 例如,对于 A=1axxx,B=1bxxx,如果 a>b 则 A>B。基于此,我们可以知道,若要使得剩下的数字最小,需要保证靠前的数字尽可能小。考虑从左往右增量的构造最后的

2022-04-06 11:10:34 351

转载 Leetcode 324-摆动排序 II

给你一个整数数组 nums,将它重新排列成 nums[0] < nums[1] > nums[2] < nums[3]… 的顺序。你可以假设所有输入数组都可以得到满足题目要求的结果。题解解法1:排序题解转载自hexcat首先,我们可以很容易想到一种简单的解法:将数组进行排序,然后从中间位置进行等分(如果数组长度为奇数,则将中间的元素分到前面),然后将两个数组进行穿插。例如:对于数组[1, 5, 2, 4, 3],我们将其排序,得到[1, 2, 3, 4, 5],然后将其分割

2022-04-05 22:00:39 154

转载 Leetcode 189-轮转数组

给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。你可以使用空间复杂度为 O(1) 的 原地 算法解决这个问题吗?方法:数组翻转题解转载自Leetcode官方该方法基于如下的事实:当我们将数组的元素向右移动 k 次后,尾部 k mod n 个元素会移动至数组头部,其余元素向后移动 k mod n 个位置。该方法为数组的翻转:我们可以先将所有元素翻转,这样尾部的 k mod n 个元素就被移至数组头部,然后我们再翻转 [0,k mod n−1] 区间的元素和 [k mod n,

2022-04-01 18:42:43 92

转载 Leetcode 334-递增的三元子序列

给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。进阶:你能实现时间复杂度为 O(n) ,空间复杂度为 O(1) 的解决方案吗?题解法一 动态规划 O(n^2)+O(n)法二 双向遍历 (O(n)+O(n))题解转载自Leetcode官方如果数组nums 中存

2022-04-01 13:55:20 162

转载 Leetcode 162-寻找峰值

峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。你可以假设 nums[-1] = nums[n] = -∞ 。你必须实现时间复杂度为 O(log n) 的算法来解决此问题。题解题解转载自画手大鹏标签:二分查找过程:首先要注意题目条件,在题目描述中出现了 nums[-1] = nums[n] = -∞,这就代表着 只要数组中存在一个元素比相邻元素大,那么沿着它一定可以找到一个

2022-04-01 10:01:20 100

转载 Leetcode 343-整数拆分

题解转载自Leetcode官方class Solution { public int integerBreak(int n) { int max=0; //dp[i]:整数i可以获得的最大乘积 int[] dp = new int[n+1]; dp[1]=1; for(int i=2;i<=n;i++){ for(int j=1;j<i;j++){ d

2022-03-27 21:03:15 79

转载 Leetcode 135-分发糖果

题解参考Krahetsclass Solution { public int candy(int[] ratings) { int[] left = new int[ratings.length]; int[] right = new int[ratings.length]; Arrays.fill(left, 1); Arrays.fill(right, 1); for(int i = 1; i < ratin

2022-03-27 19:36:32 91

原创 Leetcode 617-合并二叉树

给你两棵二叉树: root1 和 root2 。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意: 合并过程必须从两个树的根节点开始。题解class Solution { public TreeNode mergeTrees(TreeNode t1, TreeN

2022-03-27 18:34:47 62

转载 Leetcode 128-最长连续序列

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。题解题解转载自Leetcode官方方法:哈希表思路和算法我们考虑枚举数组中的每个数 x,考虑以其为起点,不断尝试匹配 x+1,x+2,⋯ 是否存在,假设最长匹配到了 x+y,那么以 x 为起点的最长连续序列即为 x,x+1,x+2,⋯,x+y,其长度为 y+1,我们不断枚举并更新答案即可。对于匹配的过程,暴力的方法是 O(n) 遍历数组去

2022-03-26 17:58:26 103

空空如也

空空如也

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

TA关注的人

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