(1)求一个数组,中的每个数字比它小的数量,比如arr[2,9,3],应该得到的结果是[0,2,1];解释:arr中第一个数字2最小,比它小的数字没有,所以个数是0,第二个数字9,比它小的个数是2个,所以返回2. 思路:可以把这个数组进行一个排序,然后拿每个数字的索引。 代码如下: function minx(nums) { //新建一个数组arr,把当前数组nums复制给它。let arr = nums.concat([]);//对数组arr进行排序,从小到大arr.sort((a, b) => a - b);//通...
242. 有效的字母异位词 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s = "anagram", t = "nagaram" 输出: true 示例 2: 输入: s = "rat", t = "car" 输出: false 说明: 你可以假设字符串只包含小写字母。 进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/valid-anagram 著作权归领扣网...
Q:斐波那契数 斐波那契数,通常用 F(n) 表示,形成的序列称为斐波那契数列,又称黄金分割数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: 0、1、1、2、3、5、8、13、21、24 ... F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 给定 N,计算 F(N)。 代码 /**@param {number} n @return {number} */ var fib = function(n) { return n < 2 ? n : fib(n - 1) + fib(n - 2) };
快速排序是一种更有效的搜索算法比选择排序,在大多数情况下,这让使用递归的。递归意味着我们从同一函数内调用一个函数。有时,这是一种非常有用的做法,这是其中一种情况。 我“在大多数情况下”说,因为我们将看到,在最坏情况下,冒泡排序可以采取相同的选择时间排序:O(n^2)。但在最佳情况下,它将O(n log n)在O(n)和之间的中间运行O(n^2)。 它是如何工作的?给定一个数组,我们选择一个称为数据透视表的项目。然后,我们得到...
加微心:NoBug1024,各大机构均有,学习课程基本上10元一个,欢迎来撩!共同成长与进步!面对当前的大环境,跳槽就业并不容易。单单做好业务开发,已经无法满足企业对中高级前端的要求。从求职角度,你需要在面试前建立自己的算法技术体系。从个人发展的角度,掌握数据结构与算法,有助于更好地阅读源码和设计编写一些复杂的工具。本课程带你用JS语言解决LeetCode上的经典算法题,对每一道题都进行线上测试,每题都有时间/空间复杂...
概念 堆的底层实际上是一棵完全二叉树,可以用数组实现。 二叉树的一种,满足以下条件:任意节点大于或小于它的所有子节点(大根堆、小根堆) 总是一完全树,即除了最底层,其它层的节点都被元素填满将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。 将数组第一个元素置空,为了方便计算。这样我们就可以从下标1开始,下标变量为i,那么:左子节点位置是 2*i 右子节点位置是 2*i+1 父节点位置是 Math.fl...
给你一个数组 nums,对于其中每个元素 nums[i],请你统计数组中比它小的所有数字的数目。 换而言之,对于每个 nums[i] 你必须计算出有效的 j 的数量,其中 j 满足 j != i 且 nums[j] < nums[i] 。 以数组形式返回答案。 来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/how-many-numbers-are-smaller-than-the-current-number著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 示例 1: 输入...
let arr = [[1, 2, 3],[4, 5, 6],[7, 8, 9],[10, 11, 12], ];function cartesianProductOf() {return Array.prototype.reduce.call(arguments, function(a, b) {var ret = [];a.forEach(function(a) {b.forEach(function(b) {ret.push(a.concat([b]));});});return ret;}, [[]]); }let allArr =cartesianProductOf(...arr ) console.log(allArr) 此算法类似笛卡尔积 转: https://www.cnblogs.com/hpx2020/p/107231...
01、 冒泡排序算法冒泡排序(Bubble Sort)是一种简单直观的排序算法。冒泡排序算法的步骤描述如下:比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。JavaScript实现冒泡排序算法的代码如下: ...
冒泡排序从前两个数开始,两两相比,较小的数放在前面。插入排序从第二个数开始,和前面的数对比,如果较小就交换位置,直到比前面的数大就停下来。选择排序从第一个数开始,循环对比其他所有的数,和比自己小的数交换位置。归并排序将原数组用二分法一直分到两个数为一组,然后通过比较将较小的数放到前面(通过一个中间数组排序);然后一层层向上排序。(就是两个数比较进行排序,然后两组(四个数)进行比较排序,然后两组(八...
//查找 function find(str,hasSortArr,callback) {let l=0,r=hasSortArr.length;let index=-1;if(hasSortArr.length>0){const ri=callback(str,hasSortArr[r-1]);if(ri===1){return [r,-1]}else if(ri===0){return [r-1,r-1]}else{r=r-1;}const li=callback(str,hasSortArr[0]);if(li===-1){return [0,-1]}else if(li===0){return [0,0]}else{l=l+1;}while(r-l>0){const m=(l+r)>>1;//比较下坐标大小const order=callback(str,hasS...
快速排序 function quickSort(ary, isDesc) {var len = ary.length;if (len < 3) {return ary;}var baseIndex = Math.floor(len / 2),base = ary[baseIndex];var smallAry = [],largeAry = [];for (var i = len - 1, cur; i > -1; i--) {cur = ary[i];if (i == baseIndex) {continue;}if (isDesc) {cur < base ? (largeAry[largeAry.length] = cur) : (smallAry[smallAry.length] = cur);} else {cur >= base ? (largeAry[largeAry...
最全前端开发面试题目:包含算法+网络+css面试+js+h5面试题目,尾部有最全BAT前端面试经典77题和答案,想要的就快来领走吧~(领取方式见文末) 一、前端算法面试1、基本排序的方式 冒泡、快排、桶排、堆排序、归并排序、插入排序。 基本也就这些吧。最重要的还是快排和插入排序和堆排序。自己多写几次,有递归形式的再好好看一下使用循环形式达到结果的形式,基本也就没什么问题了。 2、二分搜索等。 3、二叉树遍历相关。 例如前序...
问题描述 最大公共子串问题:要求在两个字符串之间找出最大的公共字符串.并且输出其所在位置.通过递推可以分析得出递推公式(博主是跟着学的,没分析) : c[i,j] = c[i-1,j-1] + 1 以下图示列出了过程.文中的代码使用的是动态规划求解. 图析代码let list_a = ['A', 'B', 'C', 'A', 'D', 'B', 'B'];let list_b = ['B', 'C', 'E', 'D', 'B', 'B'];local_max = 0; //最大值所处的位置(尾部)extend_max = 0; // 最大值所占的长度let list_d...
1、冒泡排序 冒泡算法是比较相邻的两项,如果前者比后者大,就交换他们。 假设一共有n项,那么一共需要n-1趟,第一趟需要交换n-1次,但是第一趟结束后,最后一项基本确定就是最大项了,所以第二次需要交换n-2次,第i次交换n-i次。这种排序最好情况下时间复杂度是O(n),一般情况下时间复杂度是O(n2),最差情况下也是O(n2)。这里是代码演示: 冒泡排序 2、选择排序 选择排序是找到最小的一项,然后和第一项交换位置,然后找到第二小的和...