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 ...
随机推荐
- CSS:如何学习 CSS?
马上该转战互联网领域了,在此总结一下 CSS 学习的思路. 理解 CSS 的基本语法. 理解盒子模型. 理解文档流和定位. 理解浮动和清除. 理解各种 CSS 样式. 目前发现的最好的资源是:http ...
- centos7安装debuginfo
转自:https://www.72zk.com/show/blog/20 查看内核版本,查找对应的内核rpm文件 [root@localhost ~]#uname -rsp Linux 3.10.0- ...
- input输入框只能输入正整数正则
input输入框加入限制只能输入正整数,输入其他字符会自动清除: <input type="text" value="1" onkeyup="i ...
- 安装veloeclipse插件报错解决方案
步骤: 1.把Eclipse安装目录下的artifacts.xml打开,搜索veloeclipse,把它相关的项删除: 2.Help 3. Install New Software 4.Work Wi ...
- Orchard之模版开发
生成新模版之后(参看:Orchard之生成新模板),紧接着就是模版开发了. 一:开发必备之 Shape Tracing 到了这一步,非常依赖一个工具,当然,它也是 Orchard 项目本身的一个 Mo ...
- composer - No business network has been specified for this connection 解决方案
I have installed hyperledger composer locally. But on localhost it gives error : Error : Error tryin ...
- 层次聚类 Hierarchical Clustering
-------------------------------- 不管是GMM,还是k-means,都面临一个问题,就是k的个数如何选取?比如在bag-of-words模型中,用k-means训练码书 ...
- Netty Associated -- Channel
A nexus to a network socket or a component which is capable of I/O operations such as read, write, c ...
- POJ 1719 Shooting Contest(二分图匹配)
POJ 1719 Shooting Contest id=1719" target="_blank" style="">题目链接 题意:给定一个 ...
- C++中JSON的使用详解【转】
https://blog.csdn.net/admin_maxin/article/details/53175779 jsoncpp 主要包含三个class:Value.Reader.Writer.注 ...