- 博客(17)
- 收藏
- 关注
原创 LeetCode 104.二叉树的最大深度(js)
(3)递归结束的条件(求最大深度 结束条件肯定是叶子节点)及要做的事。是指从根节点到最远叶子节点的最长路径上的节点数。(2)确定递归函数所需传递的参数。(4)中间递归层要做的操作。
2025-02-19 21:18:40
306
原创 LeetCode 129.求根节点到叶节点数字之和(JS)
因此,数字总和 = 495 + 491 + 40 =因此,数字总和 = 12 + 13 =(3)确定每一层递归需要做的事情。,树中每个节点都存放有一个。计算从根节点到叶节点生成的。(1)确定递归要传递的参数值。给你一个二叉树的根节点。是指没有子节点的节点。(2)确定递归的终止条件。
2025-02-19 19:53:01
242
原创 数组中每个元素替换为除自身以外的其他元素之积 js
一个小算法,传入一个数组,返回一个数组。数组中每个元素替换为除自身以外的其他元素之积(要求O(n)解决)。
2025-02-08 21:26:41
103
原创 LeetCode 141.环形链表
快、慢指针,从头节点出发,慢指针每次走一步,快指针每次走两步,不断比较它们指向的节点的值,如果节点值相同,说明有环。类似 “追及问题”,两个人在环形跑道上赛跑,同一个起点出发,一个跑得快一个跑得慢,在某一时刻,跑得快的必定会追上跑得慢的,只要是跑道是环形的,不是环形就肯定追不上。利用到了map对象的唯一性,注意这里存储进map的元素是一个链表节点,本质是一个实例对象(存储的是此实例对象的地址),不是单纯的值,所以是唯一的。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。
2025-02-03 14:26:54
741
原创 LeetCode 112.路径总和(js)
不存在 sum = 5 的根节点到叶子节点的路径。由于树是空的,所以不存在根节点到叶子节点的路径。的路径,这条路径上所有节点值相加等于目标和。等于目标和的根节点到叶节点路径如上图所示。(1 --> 2): 和为 3。(1 --> 3): 和为 4。和一个表示目标和的整数。是指没有子节点的节点。
2025-02-01 14:28:19
185
原创 LeetCode 15.三数之和(js)
因为原数组是杂乱无章的,若我们强行遍历势必非常繁杂,重复率很高,所以先将原数组从小到大排序,然后由i指向当前遍历到的item项,start首先指向i+1(小边),end指向length-1(大边),因为是排好了顺序的,所以当三数和大于零,则把end左移,让和变小,若三叔和小于零,则把start右移,让和变大。例:[20, 3, 5, 1] 默认排序后可能变为 [1, 20, 3, 5],因为 ‘20’ 的Unicode位点在 ‘3’ 之前。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。
2025-02-01 12:34:04
269
原创 LeetCode 100.相同的树 (js)
思路:分类讨论(节点为Null?)+ 设计递归函数(递归左、右节点)如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。,编写一个函数来检验这两棵树是否相同。给你两棵二叉树的根节点。
2025-01-28 13:18:00
240
原创 LeetCode 102.二叉树的层序遍历 (js)
,没有则将该项初始为空数组[]方便后续添加元素。然后进行result[depth].push(node.val)操作,在递归函数中,首先判断result中是否含有当前深度的项((为了将同一深度的节点push到同一数组中)。(即逐层地,从左到右访问所有节点)。,其接受两个参数,一个是当前传入的树的。然后调用本身进行递归,将。,另一个是当前节点的。
2025-01-28 12:00:27
175
原创 LeetCode 70. 爬楼梯
故采用动态规划的思想,拟定初始数组为[1,1](巧思,让i 为2时成立),从i =2开始循环遍历,最后根据n的值去数组中获取对应方案数即可。可以看出存在类似 array[i] = array[i-1] + array[i-2] 的关系。你有多少种不同的方法可以爬到楼顶呢?1. 1 阶 + 1 阶 + 1 阶。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。
2025-01-27 21:18:51
305
原创 LeetCode 53.最大子数组和 (js)
2.循环中,如果说array[i-1]+nums[i] 比 nums[i]要小,则说明array[i-1]是负数,则为了求得最大的连续和可舍去arrary[i-1],即array[i] = Math.max(array[i-1]+nums[i],nums[i]),定义两个指针,一个i,一个j,定义一个最大值max,嵌套循环数组去找i、j范围内的和,如果和大于max则更新max,时间复杂度高。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。是数组中的一个连续部分。
2025-01-27 20:59:49
589
原创 Leetcode 46 全排列(js)
3.对于每个path,对nums里面的值进行循环,如果当前path已经包含nums[i],则说明path中已包含nums[i]元素,如'122'这样,这种情况就不能把第二个2push进path中,所以要进行continue操作重新循环下一个nums[i],即为'123'这种情况。2.编写遍历函数dfs,接受一个参数即记录当前排列的数组(可以看作树的某一节点值)path,当path长度等于nums长度时,说明该排列已经完成,将当前排列path推入结果数组res,并结束当前函数。,并将其最终进行返回。
2025-01-26 15:40:06
310
原创 LeetCode20 有效的括号(js)
利用了栈先进后出的特性,采用的最最最基础的枚举法,去循环、判断了每一种可能正确的情况。如果为空,说明所有开括号都正确匹配了闭括号,返回。这个优化后的解法保持了 O(n) 的时间复杂度,并且使代码更加简洁易读。来映射开括号到对应的闭括号,这样我们可以通过查找。是否为开括号,并且可以直接获取对应的闭括号。如果不为空,说明有未匹配的开括号,返回。循环来遍历字符串,这样可以直接使用。来获取栈顶元素,并与当前闭括号。当遇到闭括号时,我们直接使用。如果匹配,循环继续,因为。,判断字符串是否有效。已经移除了栈顶元素。
2025-01-25 11:33:39
282
原创 LeetCode 415 字符串相加(js)
给定两个字符串形式的非负整数num1和num2,计算它们的和并同样以字符串形式返回。你不能使用任何內建的用于处理大整数的库(比如BigInteger), 也不能直接将输入的字符串转换为整数形式。
2025-01-25 11:13:56
253
原创 LeetCode 165. 比较版本号 (js)
version1的第二个修订号为"2",version2的第二个修订号为"10":2<10,所以version1<version2。如果其中一个版本字符串的修订号较少,则将缺失的修订号视为。version1有更少的修订号,每个缺失的修订号按"0"处理。2.因为题目中出现了一种非常不好处理的情况,就是如果版本号相对少,要。忽略前导零,"01"和"001"都代表相同的整数"1"。了,统一变成数字1,其次是每个item转为数字非常。,这样就可以统一操作,方便判断1。
2025-01-20 11:31:15
711
原创 leetcode 3. 无重复字符的最长子串 (js)
定义了左、右两个指针以及map对象的唯一性,遍历字符串,判断每次遍历的item是否在map中出现,但是前提是对应的map的value值是要大于左指针的。若出现过,则更新左指针的值以及maxlength.定义了左右指针和set数组,与解法1思想类似,但是少去了value值于左指针的判断。是解法2的优化版,省去了一些重复循环的清空比如说pwwkew。,请你找出其中不含有重复字符的。因为无重复字符的最长子串是。因为无重复字符的最长子串是。因为无重复字符的最长子串是。,所以其长度为3。,所以其长度为3。
2025-01-20 10:28:15
263
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人