自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode二叉搜索树迭代器(js实现)

二叉搜索树迭代器实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数示例:BSTIterator iterator = new BSTIterator(root);iterator.next(); //返回 3iterator.next(); // 返回 7iterator.hasNext(); // 返回 trueiterator.next(); // 返回 9iterator.hasNext(

2020-08-31 18:58:00 163

原创 leetcode二叉树的序列化与反序列化(js实现)

二叉树的序列化与反序列化序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 /反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。示例:你可以将以下二叉树: 1 / \ 2 3 / \ 4 5序列化为 “[

2020-08-28 10:55:42 299

原创 leetcode 填充每一个节点的下一个右侧节点指针(js是实现)

填充每个节点的下一个右侧节点指针给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:struct Node {int val;Node *left;Node *right;Node *next;}填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。初始状态下,所有 next 指针都被设置为 NULL。示例:解题思路仔细观察题目的意思,就可以知道,这就是层序遍历的问题:可

2020-08-27 11:26:19 227

原创 leetcode从前序与中序遍历序列构造二叉树(js实现)

从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路递归,自顶向下求解根据前序遍历和中序遍历的特点,前序遍历中,序列的第一个元素就是头节点的位置,获取头节点,在中序遍历中可根据头节点的值,返回头节点在中序遍

2020-08-27 10:18:43 706

原创 leetcode 从中序遍历和后序遍历构造二叉树(js实现)

从中序与后序遍历序列构造二叉树根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路递归,从上到下求解,根据中序遍历和后序遍历的特点,可求得:1.头节点位于后序遍历的最后一个元素;2.头节点可将中序遍历分为左右两部分;3.中序遍

2020-08-27 09:49:58 383

原创 leetcode 路径总和(js实现)

路径总和给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: 叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ \ 7 2 1返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5-&

2020-08-26 10:38:53 334

原创 leetcode 二叉树的后序遍历(js实现)

二叉树的后序遍历给定一个二叉树,返回它的 后序 遍历。示例: 解题思路后序遍历:遍历顺序为:左子树->右子树->头节点/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @return {nu

2020-08-25 16:08:10 281

原创 leetcode 二叉树的前序遍历(js实现)

二叉树的前序遍历给定一个二叉树,返回它的 前序 遍历。示例:解题思路前序遍历:头节点->左子树->右子树/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } *//** * @param {TreeNode} root * @return {number

2020-08-25 15:40:52 384

原创 leetcode 二叉树的中序遍历(js实现)

二叉树的中序遍历给定一个二叉树,返回它的中序 遍历。示例:输入: [1,null,2,3]输出: [1,3,2]解题思路中序遍历:左孩子,中节点,右孩子使用递归实现,借助一个辅助函数,递归调用,一次递归左孩子,中节点和右孩子/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null;

2020-08-24 17:24:24 512

原创 leetcode 奇偶链表(js实现)

奇偶链表给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5-&gt

2020-08-24 11:11:08 262

原创 leetcode 无重复字符的最长字串(js实现)

无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"

2020-08-21 10:23:17 309

原创 leetcode 字母异位词分组(js实现)

字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”,“bat”]输出:[ [“ate”,“eat”,“tea”], [“nat”,“tan”], [“bat”]]解题思路暴力求解分别遍历数组和数组的每一个元素,将每一个元素按字符串数组表示后进行升序排序,在利用join()内置函数将字符串数组转化为字符串,判断元素内是否有相同的字符串,有,则将原来的

2020-08-21 08:53:33 874

原创 leetcode 矩阵置零(js实现)

矩阵置零给定一个 m x n 的矩阵,如果一个元素为 0,则将其所在行和列的所有元素都设为 0。请使用原地算法。示例 1:输入: [ [1,1,1], [1,0,1], [1,1,1] ]输出: [ [1,0,1], [0,0,0], [1,0,1] ]示例 2:输入: [ [0,1,2,0], [3,4,5,2], [1,3,1,5] ]输出: [ [0,0,0,0], [0,4,5,0], [0,3,1,0] ]解题思路利

2020-08-20 16:35:39 356

原创 leetcode三数之和(js实现)

三数之和给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]解题思路最开始的思路是暴力三层循环嵌套解决,但是提示超时,后来通过查看官网题解进行优化成两层循环。首先将数组进行升序排序

2020-08-20 15:30:08 711

原创 leetcode缺失数字(js实现)

缺失数字给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例 2:输入: [9,6,4,2,3,5,7,0,1]输出: 8解题思路暴力解决通过观察可知,缺失的数字就是数组长度len的序列和数组元素的比较,基于这一点,首先将数组按升序序列排序,再同时遍历数组长度和数组元素,逐一比较两个值是否相同,若是相同则继续遍历,不同则返回i,结束循环。/** * @param {num

2020-08-20 10:46:22 295

原创 leetcode有效的括号(js实现)

有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true

2020-08-20 10:09:27 717

原创 leetcode 杨辉三角(js实现)

杨辉三角给定一个非负整数 numRows,生成杨辉三角的前 numRows行。在杨辉三角中,每个数是它左上方和右上方的数的和。示例:输入: 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]解题思路嵌套循环遍历,将杨辉三角的每一层作为外部遍历,每一层中的元素,作为内部遍历,第1层1个元素,第二层2个元素,依次将元素推入数组row中,其次,每一层元素的第0个和最后一个元素值都为1,中间的元素值为res[i-1][j-1]+res[i

2020-08-19 15:44:43 333

原创 leetcode 颠倒二进制位(js实现)

颠倒二进制位颠倒给定的 32 位无符号整数的二进制位。示例 1:输入: 00000010100101000001111010011100输出:00111001011110000010100101000000解释: 输入的二进制串00000010100101000001111010011100 表示无符号整数 43261596,因此返回 964176192,其二进制表示形式为00111001011110000010100101000000。示例 2:输入:111111111111111

2020-08-19 11:11:07 312

原创 leetcode汉明距离(js实现)

汉明距离两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意: 0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释:1 (0 0 0 1)4 (0 1 0 0)上面的箭头指出了对应二进制位不同的位置。解题思路布赖恩.克尼根算法布赖恩.克尼根算法用于快速判断二进制中有多少个1,借助num&(num-1)来直接去除num的二进制中最右边的1。但是在题目中给

2020-08-19 10:03:30 256

原创 leetcode 位1的个数(js实现)

位1的个数编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串00000000000000000000000000001011 中,共有三位为 ‘1’。示例 2:输入:00000000000000000000000010000000输出:1解释:输入的二进制串00000000000000000000000010000000 中

2020-08-19 09:29:32 335

原创 leetcode罗马数字转整数(js实现)

罗马数字转整数罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。通

2020-08-18 11:06:05 353

原创 leetcode 3的幂(js实现)

3的幂给定一个整数,写一个函数来判断它是否是 3 的幂次方。示例 1:输入: 27输出: true示例 2:输入: 0输出: false示例 3:输入: 9输出: true示例 4:输入: 45输出: false解题思路循环迭代找出数字n是否时3的幂,只要求n%3的余数为0,就一直将n/3执行,因此,可以将n除以3执行x次,最终的结果为1的话,则返回true,若是n<1,则返回false。/** * @param {number} n * @r

2020-08-18 08:39:06 404

原创 leetcode 计数质数(js实现)

计数质数统计所有小于非负整数 n 的质数的数量。示例:输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。解题思路厄拉多塞筛法从2开始,每遍历到一个数,将它的倍数去掉,直到遍历到n,再计算剩下多少个数var countPrimes = function(n) { var num = 0 var signs = [] for(var i=2;i<n;i++){ if(!signs[i]){

2020-08-18 07:58:46 197

原创 leetcode Fizz Buzz(js实现)

Fizz Buzz写一个程序,输出从 1 到 n 数字的字符串表示。如果 n 是3的倍数,输出“Fizz”;如果 n 是5的倍数,输出“Buzz”;3.如果 n 同时是3和5的倍数,输出 “FizzBuzz”。示例:n = 15,返回: [“1”,“2”,“Fizz”,“4”,“Buzz”,“Fizz”,“7”,“8”,“Fizz”,“Buzz”,“11”,“Fizz”,“13”,“14”,“FizzBuzz” ]解题思路暴力解决根据题目

2020-08-17 14:19:47 652

原创 leetcode第一个错误的版本(js实现)

第一个错误的版本你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。示例:给定 n

2020-08-13 14:55:09 375

原创 leetcode合并两个有序数组(js实现)

合并两个有序数组给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,5,6], n = 3输出: [1,2,2,3,5,6]解题思路

2020-08-13 14:14:51 810

原创 leetcode二叉树的层序遍历(js实现)

二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例: 二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果:[ [3], [9,20], [15,7] ]解题思路二叉树的层序遍历,即二叉树的广度遍历,先遍历根节点的相邻节点,再一次遍历相邻节点的子节点。广度遍历通常借助队列来实现。用队列来

2020-08-10 17:51:29 1774 1

原创 leetcode对称二叉树(js实现)

对称二叉树给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:解题思路递归求解两个数互为镜像的条件:1.他们的两个根节点具有相同的值2.每个树的右子树都与另一个树的左子树镜像对称可以根据 此构造一个递归函数,通过同时移动两个指针,来遍历左右子树,left指针和right指针一开始都指向树的根节点,left左移的同时,right右移,left右移的同时,right左移

2020-08-09 17:58:03 590

原创 leetcode 验证二叉搜索树(js实现)

验证二叉搜索树给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入:2/ \1 3输出: true 示例 2:解题思路二叉搜索树一个明显的特点就是中序遍历以后是一个有序数组,所以可以通过判断中序遍历的结果是否是升序数组,来判断是否是二叉搜索树。1.中序遍历树2.判断是否是升序数组/** * Definiti

2020-08-09 17:21:27 378

原创 leetcode二叉树的最大深度(js实现)

二叉树的最大深度给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度 3 。解题思路递归实现如果我们知道了左子树和右子树的最大深度l和r,那么该二叉树的最大深度即为max(l,r)而左子树和右子树的最大深度又可以以同样的方式进行计算,

2020-08-07 14:22:08 916

原创 leetcode环形链表(js实现)

环形链表给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:head = [1,2], pos = 0输出:true解释:链表中有一个环,其尾部连接到第一个节点。示例 3:输入:head = [1],

2020-08-07 11:29:25 632 1

原创 leetcode回文链表(js实现)

回文链表请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解题思路链表转数组法1.将链表转化为数组,利用循环遍历链表,将链表每个节点的值推入数组中,判断回文链表即为判断回文数组。2.标记数组的left,和right,循环判断arr[left]是否和arr[right]是否相等。/** * Definition for singly-linked list. * fun

2020-08-07 11:01:31 472

原创 leetcode删除链表的倒数第N个节点(js实现)

删除链表的倒数第N个节点给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.解题思路通过观察示例可知,删除第n个节点,即删除从链表开头的第(l-n+1)个节点,其中l表示链表的长度,即我们首先需要求出当前链表的长度。首先我们添加一个哑结点作为辅助,该节点位于链表的头部,哑结点用来简化某些极端情况,例如链表中

2020-08-06 12:06:16 633

原创 leetcode删除链表中的节点(js实现)

删除链表中的节点请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。现有一个链表 – head = [4,5,1,9],它可以表示为:示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释

2020-08-06 11:17:57 317

原创 leetcode最长公共前缀(js实现)

最长公共前缀编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入: [“flower”,“flow”,“flight”]输出: “fl”示例 2:输入: [“dog”,“racecar”,“car”]输出: “”解释: 输入不存在公共前缀。 说明:解题思路暴力解决取数组的第一个元素,将数组的第一个元素与数组的其余元素逐一比较,判断是否有相同的字符,若有,则将相同的字符剪切返回。1.取数组的第一元素2.遍历数组除第一个元素

2020-08-05 21:04:29 983

原创 leetcode实现strStr()(js实现)

实现 strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1解题思路1.indexOf()解决利用JavaScri

2020-08-05 12:29:08 422

原创 leetcode字符串转换整数atoi(js实现)

字符串转换整数 (atoi)请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下:如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。注意:假如该字符串中的第

2020-08-05 11:18:41 317

原创 leetcode验证回文串(js双指针解决)

验证回文串给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: “A man, a plan, a canal: Panama”输出: true示例 2:输入: “race a car”输出: false解题思路双指针问题首先利用正则表达式将字符串中的字母和数字提取出来再都以小写字母表示循环遍历数组,判断首尾指针指向元素是否相同,首尾指针不断移动,直到遍历结束返回结果/**

2020-08-04 17:50:13 212

原创 leetcode有效的字母异位词(JavaScript实现)

有效的字母异位词给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。示例 1:输入: s = “anagram”,t = “nagaram”输出: true示例 2:输入: s = “rat”, t = “car”输出: false解题思路排序法首先将字符串利用split()函数转化为字符串数组利用数组的内置函数sort()对数组进行排序后再转化为字符换比较两个字符串是否一样,一样则返回true,否则返回falsevar isAnagra

2020-08-04 17:22:34 200

原创 leetcode数组中的第一个唯一字符(JavaScript实现)

字符串中的第一个唯一字符给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。示例:s = “leetcode”返回 0s = “loveleetcode”返回 2解题思路遍历数组,利用JavaScript的内置函数indexOf()和lastIndexOf(),从前往后和从后往前同时搜索,当两个函数返回的值相同时,表示此时位置的元素只有唯一值,且最早出现。/** * @param {string} s * @return {number} *

2020-08-04 16:48:32 263

空空如也

空空如也

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

TA关注的人

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