javascript将算法复杂度从O(n^2)做到O(n)
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)的更多相关文章
- js算法初窥07(算法复杂度)
算法复杂度是我们来衡量一个算法执行效率的一个度量标准,算法复杂度通常主要有时间复杂度和空间复杂度两种.时间复杂度就是指算法代码在运行最终得到我们想要的结果时所消耗的时间,而空间复杂度则是指算法中用来存 ...
- .NET平台BigO算法复杂度备忘
之前一篇文章提到BIG O算法复杂度的备忘录, 今天这个是.NET 平台下集合类相关的Big O 算法复杂度 今天先到这儿,希望对您有参考作用, 您可能感兴趣的文章: 数据结构与算法 ...
- RX学习笔记:FreeCodeCamp的JavaScript基本算法挑战
FreeCodeCamp的JavaScript基本算法挑战 https://www.freecodecamp.com 2016-07-03 JavaScript还不是非常熟悉,用已经会的知识来解这些题 ...
- 有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M。 需要选出若干个x,使这几个x的和与 M 最接近。 请描述实现算法,并指出算法复杂度
题目:有N个正实数(注意是实数,大小升序排列) x1 , x2 ... xN,另有一个实数M. 需要选出若干个x,使这几个x的和与 M 最接近. 请描述实现算法,并指出算法复杂度. 代码如下: #in ...
- 剑指Offer——算法复杂度中的O(logN)底数是多少
剑指Offer--算法复杂度中的O(logN)底数是多少 前言 无论是计算机算法概论.还是数据结构书中,关于算法的时间复杂度很多都用包含O(logN)这样的描述,但是却没有明确说logN的底数究竟是多 ...
- 【java】之算法复杂度o(1), o(n), o(logn), o(nlogn)
在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示.不仅仅用于表示时间复杂 ...
- o(1), o(n), o(logn), o(nlogn)算法复杂度
在描述算法复杂度时,经常用到o(1), o(n), o(logn), o(nlogn)来表示对应算法的时间复杂度, 这里进行归纳一下它们代表的含义: 这是算法的时空复杂度的表示.不仅仅用于表示时间复杂 ...
- FCC的javascript初级算法题解答
FCC上的javascript基础算法题 前一阵子做的基础算法题,感觉做完后收获还蛮大的,现在将自己的做法总结出来,供大家参考讨论.基本上做到尽量简短有效,但有些算法还可以继续简化,比如第七题若采用正 ...
- javascript 冒泡排序算法
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 关于面试总结8-http协议相关面试题
前言 在PC浏览器的地址栏输入一串URL,然后按Enter键这个页面渲染出来,这个过程中都发生了什么事?这个是很多面试官喜欢问的一个问题 如果测试只是停留在表面上点点点,不知道背后的逻辑,是无法发现隐 ...
- byte数组怎么存放到Json中传递
可以把byte[]序列化成base64字符串后,再放json里传输就可以了.不需要考虑每个字节转成一个字符存到json字符串里. String str = Base64.encodeToString( ...
- 增加定时检测linux占用内存,及时清理功能
centos为了提高效率,把部分使用过的文件缓存到了内存里. 如果是这样的话,我又不需要这样的文件性能,那就可以释放.如下两个命令就可以: #sync #echo 3 > /proc/sys/v ...
- 护士当家第一至七季/全集Nurse Jackie迅雷下载
英文译名Nurse Jackie,第1-7季(2009-2015)Showtime. 本季看点:<护士当家>是一部黑色医务剧,该剧特别邀请到荣获艾美奖和金球奖的Edie Falco出演女主 ...
- 明星伙伴第一至八季/全集Entourage迅雷下载
英文译名Entourage,第1-8季(04-2011)HBO.本季看点:<明星伙伴>这是一部HBO原创系列喜剧,讲述年少成名的男主人公文森 .蔡斯和他的三个少年时纽约皇后区的朋友一道冒险 ...
- Button 自定义图片,代码绘制样式,添加音效的方法
Button自己在xml文件中绑定监听器 <!-- 设定onclick属性,然后在activity中定义相应的方法 --> <!-- 通过xml布局中通过button的android ...
- Installing Hyperledger Fabric v1.1 on Ubuntu 16.04 — Part II & Part III
This entire tutorial is the second part of the installation of Hyperledger Fabric v1.1. In the previ ...
- M2Crypto安装方法以及配置LDFLAGS、CFLAGS
python3.7+mac环境: $ brew install openssl && brew install swig $ brew --prefix openssl /usr/lo ...
- K3C官改固件更新frp客户端
k3c官改1.2 frpc版本是v0.13,本文介绍如何升级到最新版. 1. 下载最新版frp,发布页:https://github.com/fatedier/frp/releases选择mips版, ...
- 再看copy_on_write缩小临界区的例子
本例子是模拟的读者写者问题,采用shared_ptr+写时拷贝实现,其中我觉得一个比较值得注意的地方是考虑到对象可能在临界区析构而将析构移除临界区,这对于多线程来说要多看多思. #include< ...