compare the difference of two giving array, return results: 1. elements in both array, 2. elements only in one array.

        // O(m*n + m*n) -> O(2*m*n) -> O(n^2)
function compareArr1(arr1, arr2){
Array.prototype.contains = function(v) {
for (var i = this.length - 1; i >= 0; i--) {
if (this[i] == v) {
return 1;
}
}
return 0;
} arr1 = arr1.sort();
arr2 = arr2.sort();
var ein12 = [], ein1 = [], ein2 = []; for (var i = arr1.length - 1; i >= 0; i--) {
if(arr2.contains(arr1[i])){
ein12.push(arr1[i]);
}else{
ein1.push(arr1[i]);
}
} for (var i = arr2.length - 1; i >= 0; i--) {
if(!arr1.contains(arr2[i])){
ein2.push(arr2[i]);
}
} return { 'ein12': ein12, 'ein1': ein1, 'ein2': ein2 }
}
// a=[1,2,3,2,3];
// b=[2,3,4,3,4];
// compareArr1(a,b);
        // O(m*n + m + n) -> O(n^2)
function compareArr2(arr1, arr2) { function delDup(arr) {
for (var i = arr.length - 1; i >= 1; i--) {
if(arr[i]==arr[i-1]){
arr.splice(i,1);
}
}
} arr1 = arr1.sort();
arr2 = arr2.sort(); delDup(arr1);
delDup(arr2); var ein12 = [], ein1 = arr1.slice(0, arr1.length), ein2 = arr2.slice(0, arr2.length); for (var i = arr1.length - 1; i >= 0; i--) {
for (var j = arr2.length - 1; j >= 0; j--) {
if (arr1[i] == arr2[j]) {
ein12.push(arr1[i]);
ein1.splice(i, 1);
ein2.splice(j, 1);
break;
}
}
}
return { 'ein12': ein12, 'ein1': ein1, 'ein2': ein2 }
}
// a=[1,2,3,2,3];
// b=[2,3,4,3,4];
// compareArr2(a,b);
        // O(2m+2n+m+n) -> O(3(m+n)) -> O(n)
function compareArr3(arr1, arr2){
function arr2obj(obj,arr) {
for (var i = arr.length - 1; i >= 0; i--) {
obj['_' + arr[i]]=arr[i];
}
return obj;
}
var obj12 = {}, obj1 = {}, obj2 = {};
arr2obj(obj1,arr1);
arr2obj(obj2,arr2);
arr2obj(obj12,arr1);
arr2obj(obj12,arr2); var ein12 = [], ein1 = [], ein2 = []; for(var k in obj12){
if(obj1[k] && obj2[k])
{
ein12.push(obj12[k]);
}else if(obj1[k]){
ein1.push(obj12[k]);
}else{
ein2.push(obj12[k]);
}
} return { 'ein12': ein12, 'ein1': ein1, 'ein2': ein2 }
}
// a=[1,2,3,2,3];
// b=[2,3,4,3,4];
// compareArr3(a,b);

Think more, and you can do better.

javascript将算法复杂度从O(n^2)做到O(n)的更多相关文章

  1. js算法初窥07(算法复杂度)

    算法复杂度是我们来衡量一个算法执行效率的一个度量标准,算法复杂度通常主要有时间复杂度和空间复杂度两种.时间复杂度就是指算法代码在运行最终得到我们想要的结果时所消耗的时间,而空间复杂度则是指算法中用来存 ...

  2. .NET平台BigO算法复杂度备忘

          之前一篇文章提到BIG O算法复杂度的备忘录, 今天这个是.NET 平台下集合类相关的Big O 算法复杂度   今天先到这儿,希望对您有参考作用, 您可能感兴趣的文章: 数据结构与算法 ...

  3. RX学习笔记:FreeCodeCamp的JavaScript基本算法挑战

    FreeCodeCamp的JavaScript基本算法挑战 https://www.freecodecamp.com 2016-07-03 JavaScript还不是非常熟悉,用已经会的知识来解这些题 ...

  4. 有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度

    题目:有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M. 需要选出若干个x,使这几个x的和与 M 最接近. 请描述实现算法,并指出算法复杂度. 代码如下: #in ...

  5. 剑指Offer——算法复杂度中的O(logN)底数是多少

    剑指Offer--算法复杂度中的O(logN)底数是多少 前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多 ...

  6. 【java】之算法复杂度o(1), o(n), o(logn), o(nlogn)

    在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示.不仅仅用于表示时间复杂 ...

  7. o(1), o(n), o(logn), o(nlogn)算法复杂度

    在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示.不仅仅用于表示时间复杂 ...

  8. FCC的javascript初级算法题解答

    FCC上的javascript基础算法题 前一阵子做的基础算法题,感觉做完后收获还蛮大的,现在将自己的做法总结出来,供大家参考讨论.基本上做到尽量简短有效,但有些算法还可以继续简化,比如第七题若采用正 ...

  9. javascript 冒泡排序算法

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. 解决sublime text 3中文乱码问题

    解决中文乱码,需要安装两个插件 一.安装Codecs Ctrl+Shift+P 输入Install Package-->Codecs 二.安装gbk support 菜单:preferences ...

  2. WordPress主题开发:制作面包屑导航

    所谓面包屑,就是类似这种:首页 > 公司简介 > 发展历史 展示网站树型结构,并让网站访问者随时知道自己所处的位置,方便返回上几级. 将下面的代码添加到主题的 functions.php ...

  3. WCF:该不该用枚举值

    WCF支持枚举,不过在个别场景下会出现服务消费失败,如:传递或返回的枚举值(本质是int或其它)没有在枚举中定义.这种异常还很难定位,出现这种情况一般是因为BUG,因此简单的放弃使用枚举可能不是一个明 ...

  4. Linux学习13-CentOS安装ab做压力测试

    前言 网站性能压力测试是服务器网站性能调优过程中必不可缺少的一,测试环境准备好了后,如何对网站做压力测试? 压力测试的工具很多,如:ab.http_load.webbench.siege.jmeter ...

  5. Java集合类: Set、List、Map、Queue使用场景

    目录 1. Java集合类基本概念 2. Java集合类架构层次关系 3. Java集合类的应用场景代码 1. Java集合类基本概念 在编程中,常常需要集中存放多个数据.从传统意义上讲,数组是我们的 ...

  6. 摩登家庭第一季/全集Modern Family迅雷下载

    本季Modern Family Season 1 第一季(2009)看点:<摩登家庭>瞄准的是三对各有不同的美国家庭:一对普通父母与三个孩子.一对同性恋夫夫从越南领养了养女组成三口之家,一 ...

  7. client缓存机制

    一.简单介绍 client缓存机制不仅能够减轻server端的压力,同一时候也能让用户在网速较慢的情况下获取良好的用户体验. 所以构建一个优秀的APP,缓存是非常重要的一个环节. 二.处理方案 cli ...

  8. 在MFC内竟然不可以解析“Mat”

    调试了好久,在MFC内竟然不可以解析“Mat” 总是显示"Mat"没有定义,改动include.lib.依赖库, 不断地改动: #include "opencv2/img ...

  9. LockSupport的park和unpark的基本使用,以及对线程中断的响应性

    LockSupport是JDK中比较底层的类,用来创建锁和其他同步工具类的基本线程阻塞原语.java锁和同步器框架的核心AQS:AbstractQueuedSynchronizer,就是通过调用Loc ...

  10. 样条之CatmullRom

    所谓样条曲线是指给定一组控制点而得到一条曲线,曲线的大致形状由这些点予以控制,一般可分为插值样条和逼近样条两种,插值样条通常用于数字化绘图或动画的设计,逼近样条一般用来构造物体的表面.CatmullR ...