自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode102二叉树层序遍历 js 哈希表

原以为只用输出一个普通数组,完了他要输出嵌套的数组,每一层一个小数组。这就要求要知道每个节点所在层数,于是哈希表是个不错的选择。 方法是在最简单的用队列对二叉树层序遍历方法上改进的,该方法这里不赘述了,直接说本题思路:主要的变量有两个:一个变量curArr保存当前层遍历的结果,一个变量curLevel保存当前层数。每往队列里加入一个节点,就要在哈希表里也加入该节点的层数信息,由此,每出队一个节点时,都能在表里找到它的层数,若其层数是当前遍历的层,则直接保存该节点value到curArr,反之,说明该节

2022-06-28 17:12:56 299 1

原创 二叉树非递归遍历 javascript

首先要知道,递归遍历时系统会自动帮我们做入栈出栈操作,那么非递归时无非就是我们自己去调用栈。一.先序遍历最好理解: 1.头节点入栈 2.弹栈,保存弹出的结果 3.把刚刚弹出的节点的右节点和左节点压栈(先压右节点) 4.重复2-3步直到栈空了对于大树及其任何一个子树,都遵循先输出头节点,再压入右孩子,再压入左孩子的规则。这里就保证了先序遍历中的头节点先输出。在弹栈时,由于任何两个左右子树都是左子树后进栈,所以左子树必然先出栈,这就实现了“头左右”的顺序。二.后序 后序是由

2022-06-27 15:54:17 289

原创 归并排序js

思路:用递归调用将数组不断地二分(左右都二分),直到分成一个个单个元素时返回,这以后的每一层都调用一个merge函数:将左右两部分(左指针到中指针,中指针+1到右指针)排成升序的一个整体。最终会将整个数组排xu为升序。用一个图来说明:序图中从最底层的递归返回开始说起,每一层的执行顺序及执行内容就是该层右边的说明。其中,具体的排序逻辑需结合代码中的merge函数来看: 总结一下,我觉得归并排序的思想在于:从上到下:每次二分都会确定一个新的左中右范围,然后调用排序函数对该范围里的左右两部分排序从下到上:每

2022-06-19 12:03:15 154

原创 leetcode88 合并两个有序数组 js双指针

题目:给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n 。方法1:逆序双指针:从nums1的最后一个元素

2022-05-28 21:25:06 194

原创 leetcode66 加一 js

题目:给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。说白了,把数组变成对应数字,加一再变回数组。于是按着这个思路,我们可以用join、Number()、string等js自带方法“走捷径”。但是这里有一个问题,js对数字的处理不能超过16位,所以要用BigInt代替Number。具体方法我另外一篇文章有说。var plusOne = function (dig

2022-05-26 19:35:38 95

原创 js转换为数字超16位精度丢失及解决

做题时走捷径,用Number和parseInt转换字符串,碰巧遇到这个问题: console.log(Number('6145390195186705111'));输出:614539019518670500016位之后的数字不能转换。查资料,原因:在js中number类型有个最大值(安全值)。为9007199254740992,是2的53次方。如果超过这个值,那么js会出现不精确的问题。描述:MAX_SAFE_INTEGER 是一个值为9007199254740991的常量。.

2022-05-26 14:20:38 7407 5

原创 leetcode58最后一个单词长度 js

题目:给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词是指仅由字母组成、不包含任何空格字符的最大子字符串。方法:从最后一个元素往前遍历,在找到第一个非空格的字符后又从该处开始新的遍历,找到空格后返回两次遍历的索引差var lengthOfLastWord = function(s) { for(let i=s.length-1;i>=0;i--){ if (s[i]!==' '){ fo

2022-05-20 21:52:23 150

原创 回溯算法(leetcode17/39) js

回溯:在包含问题所有解的空间树中,用DFS嵌套的方式,从根节点出发,搜索整棵解空间树。搜索至任何一个节点时,总是会先判断当前节点是否可以组成不非法的解。如果不可以,则结束对「以当前节点为根节点的子树」的搜索,向父节点回溯,回到之前的状态,获取该非法节点同一层右边的元素,继续判断。若当前节点不非法,则进入该子树(下一层),继续以DFS的方式寻找下一层中不非法的元素。例题1:给你一个 无重复元素 的整数数组candidates 和一个目标整数target,找出candidates中可以使数...

2022-05-19 21:35:01 195

原创 leetcode35 搜索插入位置 javascript

题目:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。首先想到遍历数组:var searchInsert = function(nums, target) { if(target<nums[0]) return 0 for(let i=0;i<nums.length;i++){ if(nums[i]===target) return i if((nums[i]&l

2022-05-18 00:18:01 203

原创 leetcode26 删除有序数组中的重复项 javascript

题目:给你一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。方法是双指针:后指针 i 遍历数组,每当第 i 个元素和第 i-1 个元素不相等时即找到新数字,将该数字放入前指针的位置。相等则跳过。前指针从第二位开始,指向的是新数字要放入的地方,放入一个新数字前指针就右移一位。最后返回前指针的位置即所有无重复数的长度var removeDuplicates = function(nums) { ...

2022-05-12 21:50:29 215

原创 leetcoded20 有效的括号 JavaScript

题目:给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。有效字符串需满足:1.左括号必须用相同类型的右括号闭合 2.左括号必须以正确的顺序闭合。 翻译一下题目,即:每一对括号里的内容都必须对称。 最初思路是从左到右遍历,找到和当前括号闭合的另一半后判断是否是正确闭合。然后发现这种方法无法判断一对括号里的内容是否对称。 正确思路是利用哈希表(键值对,可理解为js里的对象)+栈,从里到外判断。左括号为哈希表的键,...

2022-05-11 22:59:49 163

原创 牛客nc61 两数之和 JavaScript

题目:给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。首先想到的是最简单的双重循环:function twoSum(numbers, target) { // write code here let arr = []; for (let i = 0; i < numbers.length; i++) { for (let j = i+1; j < numbers.length; j++

2022-05-10 20:28:37 415

原创 leetcode14 最长公共前缀 JavaScript

思路:取出第一个字符串循环取出它的每个字符,去和其他字符串的同位置字符比较var longestCommonPrefix = function (strs) { let str = "" let num = 0 for (let i = 0; i < strs[0].length; i++) { //遍历strs[0]的每个字符 for (let j = 1; j < strs.length; j++) { //与其它每个字符串的该位置字

2022-05-09 22:42:15 58

原创 leetcode3 无重复字符 JavaScript

题目:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。最初设想:i=0,j=1,模板str为第一个字符;j一路和str比下去,不一样就把当前字符加到str里,一样就先更新一下str的长度size,再i++,j=i+1,str为当前i的字符,继续比下去。代码如下var lengthOfLongestSubstring = function(s) { if(s.length===0) return 0 //长度为零返回0 let i=0,j=1,si..

2022-05-08 23:09:36 399

空空如也

空空如也

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

TA关注的人

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