基于js的算法题解
文章平均质量分 57
云梦摘星大菜豆
这个作者很懒,什么都没留下…
展开
-
力扣题目——29. 两数相除
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2示例:输入: dividend = 10, di原创 2021-12-16 11:23:10 · 231 阅读 · 0 评论 -
力扣题目——1557. 可以到达所有点的最少点数目
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给你一个有向无环图, n 个节点编号为 0 到 n-1 ,以及一个边数组 edges ,其中 edges[i] = [fromi, toi] 表示一条从点 fromi 到点 toi 的有向边。找到最小的点集使得从这些点出发能到达图中所有点。题目保证解存在且唯一。你可以以任意顺序返回这些节点编号。示例:输入:n = 6, edges = [[0,1],[0,2],[2,5]原创 2021-09-18 12:43:53 · 171 阅读 · 0 评论 -
力扣题目——997. 找到小镇的法官
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述在一个小镇里,按从 1 到 n 为 n 个人进行编号。传言称,这些人中有一个是小镇上的秘密法官。如果小镇的法官真的存在,那么:小镇的法官不相信任何人。每个人(除了小镇法官外)都信任小镇的法官。只有一个人同时满足条件 1 和条件 2 。给定数组 trust,该数组由信任对trust[i] = [a, b]组成,表示编号为 a 的人信任编号为 b 的人。如果小镇存在秘密法官并原创 2021-09-18 12:26:44 · 214 阅读 · 0 评论 -
力扣题目——1249. 移除无效的括号
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给你一个由 ‘(’、’)’ 和小写字母组成的字符串 s。你需要从字符串中删除最少数目的 ‘(’ 或者 ‘)’ (可以删除任意位置的括号),使得剩下的「括号字符串」有效。请返回任意一个合法字符串。有效「括号字符串」应当符合以下任意一条要求:空字符串或只包含小写字母的字符串可以被写作 AB(A 连接 B)的字符串,其中 A 和 B 都是有效「括号字符串」可以被写作 (A) 的原创 2021-09-16 11:36:36 · 201 阅读 · 0 评论 -
力扣题目——230. 二叉搜索树中第K小的元素
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。示例:输入:root = [3,1,4,null,2], k = 1输出:1输入:root = [5,3,6,2,4,null,null,1], k = 3输出:3解题思路对于二叉搜索树来说,有一以下性质:节点的左子树只包含小于当前节点原创 2021-09-16 11:15:34 · 230 阅读 · 0 评论 -
力扣题目——429. N 叉树的层序遍历
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。示例:输入:root = [1,null,3,2,4,null,5,6]输出:[[1],[3,2,4],[5,6]]解题思路这道题只需要在二叉树的层序遍历法的基础上,在弹出某个节点后,把其所有子节点push到队列中即可。唯一原创 2021-09-14 16:15:36 · 118 阅读 · 0 评论 -
力扣题目——637. 二叉树的层平均值
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。示例:输入: 3 / \ 9 20 / \ 15 7输出:[3, 14.5, 11]解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。解题思路这道题只需要在层序遍历法的结果的基础上,将每一层节点累计求和原创 2021-09-14 15:12:01 · 133 阅读 · 0 评论 -
力扣题目——103. 二叉树的锯齿形层序遍历
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层序遍历如下:[ [3], [20,9], [15,7]]解题思路这道题只需要在层原创 2021-09-14 14:53:46 · 349 阅读 · 0 评论 -
力扣题目——107. 二叉树的层序遍历 II
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其自底向上的层序遍历为:[ [15,7], [9,20], [3]]解题思路这道题只需要在层序遍历法原创 2021-09-14 14:34:20 · 175 阅读 · 0 评论 -
力扣题目——102. 二叉树的层序遍历
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层序遍历结果:[ [3], [9,20], [15,7]]解题思路可以创建一个队列queue,每次放入同一层级的节原创 2021-09-14 14:24:19 · 217 阅读 · 0 评论 -
力扣题目——25. K 个一组翻转链表
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。进阶:你可以设计一个只使用常数额外空间的算法来解决此问题吗?你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。示例:输入:head = [1,2,3,4,5], k = 2输出:[原创 2021-09-12 16:49:10 · 131 阅读 · 2 评论 -
力扣题目——143. 重排链表
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给定一个单链表 L 的头节点 head ,单链表 L 表示为:L0→L1→…→Ln−1→LnL_0 → L_1 → … → L_{n-1} → L_nL0→L1→…→Ln−1→Ln请将其重新排列后变为:L0→Ln→L1→Ln−1→L2→Ln−2→…L_0 → L_n → L_1 → L_{n-1} → L_2 → L_{n-2} → …L0→Ln→L1→Ln−1→原创 2021-09-12 15:52:12 · 226 阅读 · 0 评论 -
力扣题目——160. 相交链表
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。题目数据保证整个链式结构中不存在环。图示两个链表在节点 c1 开始相交:注意,函数返回结果后,链表必须保持其原始结构 。示例:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,原创 2021-09-12 13:36:31 · 108 阅读 · 0 评论 -
力扣题目——705. 设计哈希集合
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。描述不使用任何内建的哈希表库设计一个哈希集合(HashSet)。实现 MyHashSet 类:void add(key) 向哈希集合中插入值 key 。bool contains(key) 返回哈希集合中是否存在这个值 key 。void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。示例:输入:["MyHashSet",原创 2021-09-01 22:01:58 · 130 阅读 · 0 评论 -
力扣题目——235. 二叉搜索树的最近公共祖先
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。(描述给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大。”(一个节点也可以是它自己的祖先)例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]示例:示例1输入: root =原创 2021-08-30 11:59:39 · 158 阅读 · 0 评论 -
力扣题目——98. 验证二叉搜索树
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。题目描述给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。输入示例输入: 2 / \ 1 3输出: true输入: 5 / \ 1 4 / \ 3 6输出原创 2021-08-30 10:55:47 · 122 阅读 · 0 评论 -
力扣题目——653. 两数之和 IV - 输入 BST
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述给定一个二叉搜索树 root 和一个目标结果 k,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true。输入示例示例1:输入: root = [5,3,6,2,4,null,7], k = 9输出: true示例2:输入: root = [5,3,6,2,4,null,7], k = 28输出: false解题思路1. 排序查找法先按照中序遍历,可以原创 2021-08-30 09:39:28 · 123 阅读 · 0 评论 -
力扣题目——700. 二叉搜索树中的搜索
注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路。题目描述给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据保证 ,新值和原始二叉搜索树中的任意节点值都不同。注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回任意有效的结果 。输入示例示例1输入:root = [4,2,7,1,3], val = 5输出:[4,2,7,1,3,5]原创 2021-08-29 17:29:24 · 174 阅读 · 0 评论 -
力扣题目——700. 二叉搜索树中的搜索
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。输入示例给定二叉搜索树: 4 / \ 2 7 / \ 1 3和值: 2你应该返回如下子树: 2 / \ 1 3在上述示原创 2021-08-29 16:24:45 · 155 阅读 · 0 评论 -
力扣题目——118. 杨辉三角
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。输入示例输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]输入: numRows = 1输出: [[1]]解题思路这道题目是一个数学问题,直接按照规律去写代码即可。前两行比较固定,所原创 2021-08-20 11:44:46 · 193 阅读 · 0 评论 -
力扣题目——566. 重塑矩阵
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输原创 2021-08-20 11:25:27 · 172 阅读 · 0 评论 -
力扣题目——350. 两个数组的交集 II
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述给定两个数组,编写一个函数来计算它们的交集。输入示例输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2,2]输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[4,9]解题思路对象遍历法(其他语言是哈希法)。将数组num1和num2的元素分别转存到两个对象obj1和obj2中,对象的key为元素值,对应的value为原创 2021-08-19 13:02:46 · 98 阅读 · 0 评论 -
力扣题目——121. 买卖股票的最佳时机
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。输入示例输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买原创 2021-08-19 12:07:58 · 150 阅读 · 0 评论 -
力扣题目——88. 合并两个有序数组
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你合并nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元原创 2021-08-18 13:44:23 · 310 阅读 · 0 评论 -
力扣题目——1. 两数之和
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案输入示例输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] =原创 2021-08-18 12:00:04 · 131 阅读 · 0 评论 -
力扣题目——53. 最大子序和
注:本文的实现思路主要是基于JS(JavaScript),涉及到的一些函数都是JS中的自带函数题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。输入示例输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。输入:nums = [1]输出:1输入:nums = [0]输出:0解题思路1、贪心算法若当前元素之前的和小于0,则丢弃当前元素之原创 2021-08-17 15:47:14 · 131 阅读 · 0 评论 -
力扣题目——217. 存在重复元素
注:本文的实现思路主要是基于JS,涉及到的一些函数都是JS中的自带函数题目描述给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。输入示例输入: [1,2,3,1]输出: true输入: [1,2,3,4]输出: false输入: [1,1,1,3,3,4,3,2,4,2]输出: true解题思路针对这种问题,常见的解题思路有三种判断数组中每一个元素,在数组中的第一次出现的下标原创 2021-08-17 10:42:49 · 135 阅读 · 0 评论