本文实例总结了JavaScript数组去重算法。分享给大家供大家参考,具体如下: 测试用例:arr = ["1",3,"1",1,4,5,1,"2",5,1,{"name":"li","age":20},2,4,3,{"name":"li","age":20},""];方法一:借助于临时数组与indexOf , 算法复杂度为:O(n^2) function unique1(arr){var temp = [];for(var i=0; i<arr.length; i++){if(temp.indexOf(arr[i]) == -1){temp.push(arr[i]);}}return temp; }测试结果:unique1(arr) : ["1", 3, 1, 4, 5,...
专栏停更了很久,向大家说声抱歉。今天的主题是使用JavaScript模拟实现微信抢红包的算法。这个题目看起来很简单,不就是一个随机函数吗?我们一起实现看看。 我们假设有一个100元的红包,要发给10个人。为了保证公平,算法需要保证以下的原则: 每个人最少能抢到0.01元每个人的机会平等所有人的金额之和等于100元1.简单的随机函数实现 很多朋友的一般思路是: 第一步:从0-100中随机一个数,得到第一个红包金额。 第二步:从0-剩余...
本文实例讲述了JS实现的合并多个数组去重算法。分享给大家供大家参考,具体如下: var arr1 = [a,b]; var arr2 = [a,c,d]; var arr3 = [1,d,undefined,true,null]; //合并两个数组,去重 var concat_ = function(arr1,arr2){//不要直接使用var arr = arr1,这样arr只是arr1的一个引用,两者的修改会互相影响var arr = arr1.concat();//或者使用slice()复制,var arr = arr1.slice(0)for(var i=0;i<arr2.length;i++){arr.indexOf(ar...
1.冒泡排序 var bubbleSort = function(arr) {for (var i = 0, len = arr.length; i < len - 1; i++) {for (var j = i + 1; j < len; j++) {if (arr[i] > arr[j]) {var temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}}return arr; };2.选择排序 var selectSort = function(arr) {var min;for (var i = 0; i < arr.length - 1; i++) {min = i;for (var j = i + 1; j < arr.length; j++) {if (arr[min] > arr[j]) {min = j;}}if (i...
本文实例讲述了JavaScript实现的贝塞尔曲线算法。分享给大家供大家参考,具体如下: 如果在HTML5支持好的浏览器中,可以看到用svg绘制的路径线。 在所有浏览器中,均可以看到一个小方块沿着贝塞尔曲线路径来回运动。 效果图:主要代码: <div style="position:absolute;left:0;top:0;width:500px;height:300px;overflow:hidden;"> <svg id="root" width="500" height="300" viewBox="0 0 500 300" xmlns="http://www.w3.org/2000/s...
本文实例讲述了JavaScript实现删除数组重复元素的5种常用高效算法。分享给大家供大家参考,具体如下: 这里就 js 如何实现数组去重整理出5种方法,并附上演示Demo 以及 源码。 1.遍历数组法 最简单的去重方法, 实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点:判断值是否在数组的方法“indexOf”是ECMAScript5 方法,IE8以下不支持,需多写一些兼容低版本浏览器代码,源码如下: // 最简单数组去重...
本文实例讲述了JS排序算法之希尔排序与快速排序实现方法。分享给大家供大家参考,具体如下: 希尔排序: 定义一个间隔序列,例如是5,3,1。第一次处理,会处理所有间隔为5的,下一次会处理间隔为3的,最后一次处理间隔为1的元素。也就是相邻元素执行标准插入排序。 在开始最后一次处理时,大部分元素都将在正确的位置,算法就不必对很多元素进行交换,这是比插入元素高级的地方。 时间复杂度O(n*logn) function shellSort(){var N...
本文实例讲述了JS排序算法之冒泡排序,选择排序与插入排序。分享给大家供大家参考,具体如下: 冒泡排序: 对数组的中的数据,依次比较相邻两数的大小。 如果前面的数据大于后面的数据,就交换这两个数。 时间复杂度O(n^2) function bubble(array){var temp;for(var i=0; i<arr.length; i++){for(var j=0; j<arr.length; j++){if(arr[j]>arr[j+1]){temp = arr[j+1];arr[j+1] =arr[j];arr[j]=temp;}}console.log(arr);} }//冒泡排序...
本文实例讲述了JS笛卡尔积算法与多重数组笛卡尔积实现方法。分享给大家供大家参考,具体如下: js 笛卡尔积算法的实现代码,据对象或者数组生成笛卡尔积,并介绍了一个javascript多重数组笛卡尔积的例子,以及java实现笛卡尔积的算法与实例代码。 一、javascript笛卡尔积算法代码 例子,根据对象或者数组生成笛卡尔积。 //笛卡儿积组合 function descartes(list) {//parent上一级索引;count指针计数var point = {};var result = []...
本文实例讲述了JS实现的计数排序与基数排序算法。分享给大家供大家参考,具体如下: 计数排序 计数排序就是简单的桶排序,一个桶代表数组中一个数出现的个数,所以需要一个和数组数字范围一样大的辅助数组,一般用在范围小于100的排序,时间复杂度为O(n),空间复杂度为数组的数字范围。 /*** 范围在 start - end 之间的排序* 计数排序需要辅助数组,该辅助数组的长度是待排序数组的范围,所以一般用作范围小于100的排序*/ function...
本文实例讲述了JS基于贪心算法解决背包问题。分享给大家供大家参考,具体如下: 贪心算法:在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 寻找最优解的过程,目的是得到当前最优解 部分背包问题:固定容积的背包能放入物品的总最大价值 物品 A B C D 价格 50 220 60 60 尺寸 5 20 10 12 比率 10 11 6 5 按比例降序尽可能多放入物品 function g...
本文实例讲述了JS使用贪心算法解决找零问题。分享给大家供大家参考,具体如下: 前面介绍了JS贪心算法解决背包问题,这里再来看看找零问题的解决方法。 在现实生活中,经常遇到找零问题,假设有数目不限的面值为20,10,5,1的硬币。 给出需要找零数,求出找零方案,要求:使用数目最少的硬币。 对于此类问题,贪心算法采取的方式是找钱时,总是选取可供找钱的硬币的最大值。比如,需要找钱数为25时,找钱方式为20+5,而不是10+10+5。...
本文实例讲述了JavaScript程序设计高级算法之动态规划。分享给大家供大家参考,具体如下: 主要是看了《数据结构与算法》有所感悟,虽然这本书被挺多人诟病的,说这有漏洞那有漏洞,但并不妨碍我们从中学习知识。 其实像在我们前端的开发中,用到的高级算法并不多,大部分情况if语句,for语句,swith语句等等,就可以解决了。稍微复杂的,可能会想到用递归去的解决。 但要注意的是递归写起来简洁,但实际上执行的效率并不高。 我们...
本文实例讲述了JavaScript数据结构与算法之队列原理与用法。分享给大家供大家参考,具体如下: 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出)。在栈中,最后入栈的元素反而被优先处理。我们现在可以把队列想象对我们去餐馆吃饭的情景,很多人排队吃饭,排在最前面的人先打饭。新来的人只能在后面排队。直到轮到他们为止。 一:对队列的操作...
本文实例讲述了JS实现的数组去除重复数据算法。分享给大家供大家参考,具体如下: 在JS中经常会遇到去除数组中重复数据的需求,在此介绍四种算法以实现JS数组去重的功能. 1. 速度最快算法:对象键值对法 实现思路:新建一js对象以及新数组,遍历传入数组时,判断值是否为js对象的键,不是的话给对象新增该键并放入新数组。 //注意点: 判断 是否为js对象键时,会自动对传入的键执行“toString()”,不同的键可能会被误认为一样;例如...