- 博客(20)
- 收藏
- 关注
原创 力扣77.组合
算同一个组合),所以需要用回溯来枚举所有可能。一、算法思想:回溯法(深度优先搜索),一步步看代码如何生成所有组合。对于组合问题,我们需要在。使用回溯会比较容易解决。二、代码执行流程(以。
2025-09-27 21:14:22
503
原创 力扣101.对称二叉树
按照轴对称的思路来看,可以把一棵树拆分成左子树和右子树两颗树,比较左子树的右结点和右子树的左节点;左子树的左节点和右子树的右结点是否相同。
2025-09-16 18:47:19
285
原创 力扣226.翻转二叉树
相当于把左抽屉里的蓝色盒子和右抽屉里的红色盒子直接互换位置 —— 蓝色盒子到右抽屉,红色盒子到左抽屉,盒子里的纸条不变 —— 抽屉的 “存放结构” 完全翻转了。:相当于把两个盒子里的纸条互换(蓝色盒子写 3,红色盒子写 1),但蓝色盒子还在左抽屉,红色盒子还在右抽屉 —— 抽屉的 “存放结构” 没改。右抽屉(A.right):里面放着 “红色盒子”(C,盒子里有一张纸条写着 3)左抽屉(A.left):里面放着 “蓝色盒子”(B,盒子里有一张纸条写着 1)疑惑点:直接交换左右结点的val值是否可行?
2025-09-16 17:59:09
623
原创 力扣20.有效的括号
使用stack.push()方法可以将元素压入栈,即入栈,使用stack.pop方法可以将栈顶元素弹出,即出栈,stack.isEmpty()可以用来判读栈是否为空。当遇到左括号时,我们向栈内压入对应的右括号,当遇到右括号时,我们将栈顶元素弹出并与遇到的右括号比较,相等就继续出栈,不相等就返回false;在 Java 中,栈(Stack)是一种遵循 "后进先出"(LIFO)原则的数据结构。的方法都是同步的(线程安全),带来额外性能开销。,包含了一些不属于栈操作的方法(如。),可能破坏栈的完整性。
2025-09-13 20:10:45
780
原创 力扣15.三数之和
用result.add(Arrays.asList(nums[i] ,nums[p1] ,nums[p2]))来将符合条件的三元组存入list中。是一个循环控制语句,用于跳过当前循环中剩余的代码,直接进入下一次循环。对于第一个元素的去重,当第i个元素与第i-1个元素相等时,那么我们就可以进入下一次循环,因为若。对于第二个元素的去重,当找到一个有效三元组后,对于第三个元素的去重,当找到一个有效三元组后,:在找到和为 0 的三元组后,向右移动。:在找到和为 0 的三元组后,向左移动。位置能组成的三元组,
2025-09-13 19:30:08
693
原创 力扣11. 盛最多水的容器
很经典的双指针题目;定义首尾指针,因为是算面积,所以比较首尾指针所指向的元素,用较小的元素与这两个元素之间的距离相乘,然后与面积进行比较,保存较大的面积后移动较小一方的指针,如此循环....
2025-09-11 16:01:34
173
原创 力扣167. 两数之和 II - 输入有序数组
定义左右双指针,因为数组为有序数组,所以左右数组元素相加小于目标值的,左指针移动,左右数组元素相加大于目标值的,右指针移动;
2025-09-10 20:25:38
228
原创 力扣392. 判断子序列
定义两个指针,都指向字符串开头,然后进行比较,若相等则两个指针都往后继续移动;若不相等则字符串短指针的不移动,长的移动;当短的字符串的指针移动到最后一位时,则为true;
2025-09-10 19:49:55
173
原创 力扣125.验证回文串
当我们在知道以上知识点后,这道题就变得很容易了,思路就是先处理字符串,然后一个指针指向字符串的第一个,一个指针指向最后一个,遍历字符并比较,两个字符相等就指针移动比较下一个,当两个指针相遇时,即为回文串;方法可以将字符串中的所有大写字母转换为小写字母,该方法会返回一个新的字符串,原字符串不会被修改。方法可以返回指定索引位置的字符,结合循环可以遍历整个字符串。但是先处理再比较用时太长,我们可以稍微优化一下,边处理边比较。(3).使用 Java 8 的。1.字符串的遍历要怎么遍历?方法遍历(通过索引访问)
2025-09-10 18:49:08
916
原创 力扣122. 买卖股票的最佳时机 II
回到当前题目,我们只需要考虑,当今天的股票价格比昨天高,我们就把这个股票卖出去,因为同一天可以既卖又买,所以我们的逻辑是只赚眼前钱,今天比昨天价格高,那我就卖了赚这个差价,然后再按今天的价格买一股,然后明天要是没有今天买的价格高,我就留在手里不卖,等后天高了我再卖出去,再按后天的价格买一股.....简单来说,就是 "走一步看一步",每次都做出局部最优的决策,不考虑未来可能的情况,也不回头修改之前的选择。贪心算法并非适用于所有问题,只有当问题具有 "贪心选择性质",从而希望最终得到全局最优解的解题策略。
2025-09-08 20:44:26
477
原创 力扣121.买卖股票的最佳时机
先假定第一天股票价格是最低的,利润为0,然后拿第一天的股票价格与后面的股票价格进行比较,若比第一天价格低则把这一天的价格赋值给最低股票价格,如果比最小值大,则计算他们之间的差值并记录,对于每个价格,要么更新最低买入价,要么计算当前卖出能获得的利润持续更新最大利润值。遍历价格数组时,始终保持对 "最低买入价" 的跟踪。当结束循环之后,所得到的利润就是最大利润.
2025-09-08 19:48:45
158
原创 力扣189.轮转数组
后看题解使用三次翻转法,好理解也便于代码实现,即先将数组所有元素都翻转,然后翻转所需元素,即前K个元素,最后再翻转剩余元素....最开始使用暴力解法,先保存最后一位,然后将数组元素依次后移,然后把最后一位赋值给数组第一位,但是提交超时;另外注意:不要忽略了K的大小可能会大于数组长度的情况,因为每n次旋转数组会回到原位....
2025-09-08 16:46:04
203
原创 力扣169.多数元素
在任何数组中,多数元素的数量超过了其他所有元素数量的总和。因此,可以把多数元素想象成一种 “力量” 更大的元素,在统计过程中,它能 “抵消” 掉其他非多数元素。当把所有元素都处理完后,剩下的就是多数元素。暴力解法:我们可以通过双重循环来实现,外层循环遍历数组中的每个元素,内层循环统计该元素在数组中的出现次数,若出现次数大于。
2025-09-07 19:23:14
748
原创 力扣80.删除有序数组中的重复项 II
1.判断nums[4](2) vs nums[1](1) → 不相等。1.判断nums[5](3) vs nums[2](2) →不相等。考虑完后,定义快慢指针,快指针和慢指针的初始值都可以从2开始,数组前两位默认保留,符合题意;2.执行nums[3]=2,数组变为[1,1,2,2,2,3]2.执行nums[4]=3,数组变为[1,1,2,2,3]因为元素次数不超过两次,首先要考虑只有两个元素的特殊数组。,然后慢指针后移,遍历完毕后,慢指针的值就是数组长度;这样就能保证相同元素最多只有两个。
2025-09-07 18:57:13
231
原创 力扣26.删除有序数组中的重复项
首先处理数组为空的特殊情况,然后定义两个指针,慢指针指向数组第一位,快指针指向数组的下一位,因为是有序数组,所以当快指针所指的元素与慢指针所指的元素不相等时,即找到了一个新的唯一元素,先把慢指针向后移动,然后把快指针的值赋值给慢指针。就是数组中唯一元素的个数(因为下标从。遍历结束后,慢指针的下标加。
2025-09-07 18:05:06
211
原创 力扣88.合并两个有序数组
当两个数组中都存在未处理的元素时,即下标都大于等于0时,只需从数组最后开始比较元素大小,将较大的元素放在新数组(nums1)的最后,然后往前移动较大元素数组的下标指针;然后再往前移动新数组(nums1)的下标;再定义p为新数组(题中为nums1)的最后一个元素的下标;如果nums2还有剩余元素,直接复制到nums1前面。定义p1指向nums1的最后一个元素的下标,定义p2指向nums2的最后一个元素的下标,使用逆向双指针是这道题目的最优解法。
2025-09-06 18:52:57
134
原创 力扣27.移除元素
定义快指针和慢指针,快指针代表 移除元素后的新数组里所需要的元素;慢指针代表 新数组的下标;当遇到属于新数组的元素时,将快指针的值赋值给慢指针,慢指针向后移动.本题使用双指针,当然,暴力也行。
2025-09-06 18:05:34
148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅