![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode简单题攻关
鸢尾小菜
这个作者很懒,什么都没留下…
展开
-
乐扣简单题(144)js--二叉树的前序遍历
解法一:递归版要注意,在用递归法做前序遍历的时候,需要声明一个数组,将所有值按顺序push进去。所以要将数组的声明放在函数体的外面,return也是,以此形成一个闭包,函数体中push的最后结果将会被返回。如果将数组声明和return都写在函数体中,有几个元素被push进去将会产生几个数组/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (原创 2022-03-17 11:01:02 · 1219 阅读 · 0 评论 -
乐扣简单题(112)js--路径总和
给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。遇到看这条路径上的节点值的和,就考虑到深度优原创 2022-03-16 16:06:00 · 222 阅读 · 0 评论 -
乐扣简单题(94)js--二叉树的中序遍历
中序遍历可以有递归方法和非递归方法解法一:递归方法/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null原创 2022-03-16 15:41:39 · 1150 阅读 · 0 评论 -
乐扣简单题(111)js--二叉树的最小深度
刚学了一个最大深度,又来了一个最小深度,惯性思维认为最小深度也是用深度优先遍历呗,取得每一个元素的层级之后,再判断最小的符合条件的层级是谁就可以了呀。其实这样想也是对的,但是在实际运行过程中会比较浪费,因为明明在遇到第一个满足条件的元素的时候就已经可以停止了,你却偏偏要遍历全部的元素然后再判断。所以对于最小深度而言,比较合适的方式是采用广度优先遍历。在广度遍历的过程中,遇到叶子节点就可以停止遍历,返回节点层级。解法一:深度优先遍历/** * Definition for a binary原创 2022-03-15 17:25:16 · 1280 阅读 · 0 评论 -
乐扣简单题(104)js--二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。二叉树的遍历其实是比较简单的,有很多方法,这里需要求的是二叉树的最大深度,就可以用深度优先遍历来遍历整棵树。额外增加的步骤就是要有一个变量来记录每个节点的层级,同时需要不断地刷新最大深度,最后返回这个变量即可。/** * Definition for a binary tree node. * function TreeNode(val, left, right原创 2022-03-15 16:05:26 · 306 阅读 · 0 评论 -
乐扣简单题(349)js--两个数组的交集
求数组的交集,无序且唯一首先用集合对nums1去重,遍历nums1,筛选出nums2也包含的值判断nums2中是否包含某个值,如果是数组,可以用nums2.includes(n)如果是集合,可以用new Set(nums2).has(n)/** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */var intersection = function(nums1, nums2) {原创 2022-03-11 21:55:05 · 81 阅读 · 0 评论 -
乐扣简单题(141)js--环形链表
对于环形链表的判断,想象成两个人在跑步,如果有环,终会见面设置一个快指针和一个慢指针,如果二者有重逢,则返回true,没有就返回false/** * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } *//** * @param {ListNode} head * @return {boolean} */原创 2022-03-11 20:28:39 · 271 阅读 · 0 评论 -
乐扣中等题(946)js--验证栈序列
其实是抱着试试看的态度来写的,感觉颇具有挑战力,第一次写出来个半成品还是有点成就感的,遇到的小坑就是,忘记了const是不可以修改的,要用let写变量题目相当于是给了一个数组的两种排序方式,一边是push进去的,一遍是pop出来的,让看经过一番操作,栈是否为空。刚巧最近看过栈相关的知识,其实也就只会个push和pop,浅浅尝试一下先定义数组来模拟栈,遍历pushed数组,将元素push进去栈,在过程中,只要是栈不空的情况下,判断栈顶元素和我们想要pop出去的元素是否一致,相等则弹出,并且pope原创 2022-03-11 16:39:28 · 187 阅读 · 0 评论 -
乐扣简单题(83)js--删除排序链表中的重复元素
本来以为这道题很简单,又是有序,那不就是简单判断一下当前的这个和下一个是否相等,相等的话直接就把next指针指向next.next,看起来好像很简单,但是毕竟是leetcode的题目,还是有一点小坑的。惯性思维会将重复元素认为是2个,所以一旦有超过两个的重复元素出现,就会卡问题了。最简单的解决方式就是在删除节点之后不要将指针指向下一个,一个一个判断,比较靠谱。/** * Definition for singly-linked list. * function ListNode(val,原创 2022-03-11 16:07:06 · 387 阅读 · 0 评论 -
乐扣简单题(206)js--反转链表
链表的遍历是简单的,上文已经讲过,对于链表的反转,可以设置两个一前一后的指针,用p1进行遍历,然后用p2滞后于p1一点,将p1.next指向p2话不多说,上代码/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : n原创 2022-03-11 14:27:01 · 330 阅读 · 0 评论 -
乐扣简单题(237)js--删除链表中的节点
链表是由多个元素组成的列表,元素存储不连续,用next指针连在一起。数组和链表的区别:数组增删非首尾元素时往往需要移动元素链表增删首尾元素不需要移动元素,只需要更改next指向即可JS中没有链表,但是可以用object来模拟链表const a={val='a'}...const d={val='d'}a.next=b;b.next=c;c.next=d;/*这样就形成了链表*//*遍历链表*/let p=a;while(p) {console.log(p.val)原创 2022-03-11 11:13:04 · 1248 阅读 · 0 评论 -
乐扣简单题(933)js--最近的请求次数
队列是一个先进先出的数据结构,JS中没有队列,但可以用Array实现队列所有的功能const queue=[];queue.push(1);queue.push(2);const item1=queue.shift();const item2=queue.shife();/*移除数组的第一个元素,并且返回它*/最近的请求次数,分析题目,就是说,有新的请求就入队,在3000ms之前发出的请求就出队,队列的长度就是请求的次数。这么看来,其实简单,但是在新建队列的时候会发现,新建的队列需原创 2022-03-07 22:46:31 · 220 阅读 · 0 评论 -
乐扣简单题(20)js--有效的括号
栈是一个先进后出的数据结构,在JS中没有栈,但是可以用Array实现栈的所有功能,因此可以定义数组来模拟栈。const stack=[];stack.push(1);stack.push(2);const item1=stack.pop();const item2=stack.pop();/*把数组最后一个元素pop出去,并且可以获取其值*/有效括号的解决,可以采取新建一个栈,在遇到左括号的时候入栈,遇到和栈顶括号类型匹配的右括号出栈,类型不匹配时直接不合法,最后栈空合法,否则不合法原创 2022-03-07 22:15:05 · 482 阅读 · 0 评论 -
乐扣简单题26(js)--删除有序数组中重复项
由于要求只能在原本的数组上进行修改,莫名之中就增加了难度还是参考大佬们的题解才思考出来的其实就是因为数组自身是有序的,所以第一项肯定是没有问题的,重点应该放在后面的项上设置一个快、一个慢先让j=0,这一个参数相当于记录有几个不重复的数,随后当有不重复的时候就由i赋给j返回的这个j相关的默认就是数组的位数了var removeDuplicates = function(nums) { var j=0; for(var i=1; i<nums.length;原创 2022-02-24 22:25:30 · 274 阅读 · 0 评论 -
乐扣简单题14(js)--最长公共前缀
简单题一点都不简单啊有被虐到但是看了大神们的解题 也总结出来一个小思路坚持 就是胜利!1、既然是最长公共前缀,那么起决定性因素的就是数组中最短的那个元素,首先需要找到最短的那个元素长度是多少,当然了,如果这个数组自己本身的长度为0就不必多说了。首先就是把数组中第一个元素当作最短的元素,参数提取出它的字符串还有长度,接下来遍历整个数组,用三元运算符,搞定最短的元素的长度。2、找到了最短的元素之后,就是比较整个元素有几位和其他剩余元素是完全相等的,对这个元素的位数进行遍历,将第一个元素t原创 2022-02-24 16:58:44 · 407 阅读 · 0 评论 -
乐扣简单题13(js)--罗马数字转整数
给定一个罗马数字,将其转换成整数罗马数字有一个map,首先应该建立一个const map表格,将罗马数字的表示和整数联系在一起,而后对输入的罗马数字s进行一个按位的比对。由于二位的罗马数字优先级更高,想到了&&运算中的短路运算,首先将位数放在前面判断,&&右边放在map中是否会找到这个二位的字符,如果可以找到短路成功,直接在结果上加这个二位的数值,位数向后挪2,如果没有,在结果上加被短路的一位罗马数字,尾数向后挪1,以此类推。var romanToInt = f原创 2022-02-24 15:44:21 · 409 阅读 · 0 评论 -
力扣简单题9(js)--回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。注意事项小白考虑事情比较简单,直接将整数x转为字符串,遍历字符串,用第一个和最后一个比较是否原创 2022-02-24 15:22:00 · 450 阅读 · 0 评论 -
力扣简单题1(js)--两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。注意事项1、用户输入数字如何写为数组原创 2022-02-24 14:48:52 · 250 阅读 · 0 评论