JavaScript数据结构与算法
文章平均质量分 58
Yolanda_NuoNuo
女程序媛,瑜伽教练
展开
-
JavaScript实现二分查找(搜索)算法(非递归实现)
JavaScript实现前端经典算法二分查找,面试常考哟~一、二分查找算法分析用二分查找算法查找目标值在数组中对应的下标1、二分搜索算法的前提是一个有序数组,所以编码实现的时候,先对它排了个序2、二分查找就是(1)劈成两半,最左边一个指针low,最右边一个指针high,最中间一个指针mid(2)如果查找的目标值小于中间mid对应的值,说明目标值在左边,那就缩小范围,把high设置成mid-1(3)如果查找的目标值大于中间mid对应的值,说明目标值在右边,那就缩小范围,把low设置成mid+1原创 2021-07-30 13:15:08 · 784 阅读 · 2 评论 -
JavaScript实现快速排序算法
JavaScript实现经典排序算法—快排快速排序算法的性能比之前的冒泡、选择排序都要好,和归并排序一样,是一个可以用于实战的算法,听说chrome用的就是快排又听说前端面试会考,那你实现一个快排吧!一、快速排序的算法思路还是在这里看一下快排是啥意思快速排序算法动图1、快速排序的特点就是随机设置一个基准点,比如是数组的第一个元素,然后数组的其他元素就跟这个基准线进行对比,比基准线大的放在左边,比基准线小的放在右边2、再设置一个基准线,再这样小的放左边,大的放右边,递归。二、编码实现详细分析原创 2021-07-30 12:05:07 · 1935 阅读 · 6 评论 -
JavaScript实现归并排序算法
归并排序稍微复杂一丢丢,但是它的性能比前面的冒泡、选择和插入排序都好一点,是可以用在实战中的排序算法,听说以前火狐浏览器就是用它的归并排序算法动图一、归并排序的算法思路为了说清楚,假如有10个数1、先分组,大组分小组,再分小小组,直到分成一个数一组左边是L,右边是R,每一个-表示后面的细分小组(1)归并排序就是先对半劈,分成左边L1组5个和右边R2组5个两组(2)左边5个分成左左边L1-L1组3个和右右边L1-R1组2个两组(3)左左边的3个分成左左左边L1-L1-L1组的2个和右右右边L1原创 2021-07-29 13:51:19 · 222 阅读 · 0 评论 -
JavaScript实现冒泡排序、选择排序和插入排序
在前几话话中深入研究了一下冒泡排序及其优化JavaScript实现冒泡排序及双向冒泡排序今天总结一下排序算法中也极为经典的选择排序和插入排序一、回顾冒泡排序为了更好的比较这几种算法,首先回顾一下之前冒泡排序的思想和简单实现这个网站可以看到这几种排序的动图,可以手动演示一下,了解这几种排序的思想冒泡排序算法动图展示1、冒泡排序的思路(1)方向:冒泡排序是向右排的(2)第一轮会从第一个数开始跟相邻的右边的数比较,比右边大就交换一下,这样不断重复跟右边相邻的数字比较,就像冒泡一样,冒出了最大的数原创 2021-07-29 10:47:29 · 392 阅读 · 0 评论 -
JavaScript实现Leetcode112-路径总和
这题好像经常看到,练了前面的感觉还是很简单112. 路径总和1、题目描述给你二叉树的根节点 root 和一个表示目标和的整数 targetSum ,判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。叶子节点 是指没有子节点的节点。2、解题思路是用树的深度优先遍历算法遇到叶子结点就判断路径和是不是等于目标值3、编码实现细节写在注释上/** * @param {TreeNode} root * @param {number} ta原创 2021-07-28 11:25:39 · 163 阅读 · 0 评论 -
JavaScript实现Leetcode102-二叉树的层序遍历
上一话利用树的深度优先遍历和广度优先遍历做了两道简单级别的题1、题目描述102. 二叉树的层序遍历中等难度给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。2、解题思路这道题明显就是利用树的广度优先遍历,遍历每一层的时候,同一层的放在一个数组里,最后结果在一个二维数组里3、编码实现/** * @param {TreeNode} root * @return {number[][]} */var levelOrder = function原创 2021-07-28 10:47:12 · 258 阅读 · 0 评论 -
JavaScript实现Leetcode104-二叉树的最大深度和111-二叉树的最小深度
学习了树的深度优先算法和广度优先算法后,做这两道题就没有难度了~一、104. 二叉树的最大深度1、解题思路:(1)用上一话的树的深度优先遍历算法实现JavaScript实现树的深度优先遍历和广度优先遍历(2)记得用一个变量去记录层级,递归刷新层级并拿最大的结果2、编码实现/** * @param {TreeNode} root * @return {number} */var maxDepth = function(root) { // 深度优先遍历 let resDe原创 2021-07-28 09:56:47 · 227 阅读 · 0 评论 -
JavaScript实现树的深度优先遍历和广度优先遍历
一、来棵树1、tree.jsconst tree = { val: 'a', children: [ { val: 'b', children: [ { val: 'd', children: [] }, { v原创 2021-07-27 13:07:37 · 1599 阅读 · 1 评论 -
JavaScript实现二叉树前中后序遍历(递归和非递归分别实现)
JavaScript实现二叉树的前中后序遍历(递归和非递归)一、来一棵绿绿的二叉树1、binary-tree.jsconst binaryTree = { val: 'a', left: { val: 'b', left: { val: 'd', left: null, right: null }, right: { val:原创 2021-07-23 13:33:28 · 1325 阅读 · 2 评论 -
JavaScript实现Leetcode933-最近的请求次数
JavaScript算法与数据结构队列之Leetcode933-最近的请求次数一、队列1、先进先出2、JavaScript中没有队列,用Array实现const queue = [];queue.push(1);queue.push(2);const item1 = queue.shift();//1const item2 = queue.shift();//2二、Leetcode933-最近的请求次数1、https://leetcode-cn.com/problems/number-原创 2021-06-03 20:15:35 · 231 阅读 · 3 评论 -
JavaScript实现Leetcode20-有效的括号(Set,Map,字符串替换三种方式实现)
JavaScript算法与数据结构栈之Leetcode20-有效的括号题解一、栈1、后进先出2、 JavaScript用Array实现栈const stack = [];stack.push(1);stack.push(2);stack.pop();stack.pop();二、栈的应用场景1、十进制转二进制为毛呢,因为一个十进制熟除以2的余数,最先除出来的余数放在最高位上,随手实现了一个const translate = (num) => { let stack =原创 2021-06-03 18:31:54 · 325 阅读 · 1 评论