JavaScript-Algorithms icon indicating copy to clipboard operation
JavaScript-Algorithms copied to clipboard

基础理论+JS框架应用+实践,从0到1构建整个前端算法体系

Results 112 JavaScript-Algorithms issues
Sort by recently updated
recently updated
newest added

> function TreeNode(val) { > this.val = val; > this.left = this.right = null; > }

字节

### 引言 堆是前端进阶必不可少的知识,也是面试的重难点,例如内存堆与垃圾回收、Top K 问题等,这篇文章将从基础开始梳理整个堆体系,按以下步骤来讲: - 什么是堆 - 怎样建堆 - 堆排序 - 内存堆与垃圾回收 - Top K 问题 - 中位数问题 - 最后来一道leetcode题目,加深理解 下面开始吧👇 ### 一、堆 满足下面两个条件的就是堆: - 堆是一个完全二叉树 - 堆上的任意节点值都必须大于等于(**大顶堆**)或小于等于(**小顶堆**)其左右子节点值 如果堆上的任意节点都大于等于子节点值,则称为...

内存堆
文章
Top K

1959年Shell发明,第一个突破 O(n^2^) 的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。 #### 插入排序 插入排序的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入 ![](http://resource.muyiy.cn/image/20200705230615.png) **代码实现:** ```js function insertionSort(arr) { let n = arr.length; let preIndex, current; for (let i = 1; i < n; i++) { preIndex...

阿里

数组的每个索引作为一个阶梯,第 `i` 个阶梯对应着一个非负数的体力花费值 `cost[i]` (索引从0开始)。 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。 您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。 **示例 1:** ```js 输入: cost = [10, 15, 20] 输出: 15 解释: 最低花费是从cost[1]开始,然后走两步即可到阶梯顶,一共花费15。 ``` **示例 2:** ```js 输入: cost...

LeetCode
字节

最近在不间断、碎片的看贪心算法问题,相比回溯、动态规划问题,贪心算法理论最简单,死扣理论解决问题却很难,大部分的贪心问题一眼懵,很难看出是贪心问题,也很难找到解题套路,因此此部分介绍几道典型的贪心问题,并总结一套贪心套路帮助解题 ## 贪心算法 #### 算法策略 贪心算法,故名思义,总是做出当前的最优选择,即期望通过局部的最优选择获得整体的最优选择。 某种意义上说,贪心算法是很贪婪、很目光短浅的,它不从整体考虑,仅仅只关注当前的最大利益,所以说它做出的选择仅仅是某种意义上的局部最优,但是贪心算法在很多问题上还是能够拿到最优解或较优解,所以它的存在还是有意义的。 在日常生活中,我们使用到贪心算法的时候还是挺多的,例如:从100章面值不等的钞票中,抽出 10 张,怎样才能获得最多的价值? 我们只需要每次都选择剩下的钞票中最大的面值,最后一定拿到的就是最优解,这就是使用的贪心算法,并且最后得到了整体最优解。 往往遇到的问题并不是这么简单,例如: #### 二倍数对数组问题 给定一个长度为偶数的整数数组 `arr`,只有对 `arr` 进行重组后可以满足 - 对于每个 `0 { if(a

实现一个 `render(template, context)` 方法,将 `template` 中的占位符用 `context` 填充。 **示例:** ```js var template = "{{name}}很厉害,才{{age}}岁" var context = {name:"bottle",age:"15"} 输入:template context 输出:bottle很厉害,才15岁 ``` **要求:** - 级联的变量也可以展开 - 分隔符与变量之间允许有空白字符 相关文章可查看:[一行代码实现一个简单的模板字符串替换](https://mp.weixin.qq.com/s/yjGatP7NSnZRAB3v5FslmQ)

百度

上周发了篇文章,关于一名 95 后女程序员(4 年前端开发),对现状的担忧与对未来的焦虑担忧,文章一经发出,后台就收到很多反馈,大部分的人都表示认同: ![WechatIMG28](https://user-images.githubusercontent.com/19721451/162015147-a5240cda-cda5-4231-819a-995c0406a57b.jpeg) 因此,我决定把自己的每日进阶记录下来,有时可能 2-3 天一起,每日内容不多,如果你不清楚怎么做,就和我一起吧,如果你有规划,也可以关注「**三分钟学前端**」,添加我的微信 **pzijun_com**,将你的每日进阶记录发送到群群里,我们一起督促学习 # 回溯算法 **什么是回溯算法问题?** 回溯算法是一种搜索法,试探法,它会在每一步做出选择,一旦发现这个选择无法得到期望结果,就回溯回去,重新做出选择。它就是不断的尝试,直到拿到解。因此它类似于一种暴力穷举的算法,此类问题一般都很少考虑时间复杂度问题 它的这种算法思想,使它通常用于解决广度的搜索问题,即从一组可能的解中,选择一个满足要求的解,或得到所有满足要求的解。因此它常采用深度优先遍历(DFS)求解 我们最常遇到的问题,例如: - 全排列问题 - 括号生成问题 - 组合总和问题 - 树的深度遍历问题 ## 全排列问题 给定一个 **没有重复** 数字的序列,返回其所有可能的全排列。 ```javascript 输入:...

请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。接下来的转化规则如下: 如果第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字字符组合起来,形成一个有符号整数。 假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成一个整数。 该字符串在有效的整数部分之后也可能会存在多余的字符,那么这些字符可以被忽略,它们对函数不应该造成影响。 注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换,即无法进行有效转换。 在任何情况下,若函数不能进行有效的转换时,请返回 0 。 提示: 本题中的空白字符只包括空格字符 ' ' 。 假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231,  231 − 1]。如果数值超过这个范围,请返回  INT_MAX (231 − 1) 或 INT_MIN (−231)...

腾讯
LeetCode
剑指Offer

要求: 1、只能修改 `setTimeout` 到 `Math.floor(Math.random() * 1000` 的代码 2、不能修改 `Math.floor(Math.random() * 1000` 3、不能使用全局变量 ```javascript function print(n){ setTimeout(() => { console.log(n); }, Math.floor(Math.random() * 1000)); } for(var i = 0; i...

字节
编程题

请用算法实现,从给定的无需、不重复的数组A中,取出N个数,使其相加和为M。并给出算法的时间、空间复杂度,如: ```js var arr = [1, 4, 7, 11, 9, 8, 10, 6]; var N = 3; var M = 27; Result: [7, 11, 9], [11, 10, 6], [9, 8,...

字节