This question already has answers here:
How to find the only number in an array that doesn't occur twice [duplicate]
(5个答案)
在给定的数字数组中,一个元素将显示一次,其余元素将显示两次。你能在o(n)线性时间内找到那个数吗?
例如-
到目前为止,我在javascript和我的代码中尝试这个-
但是这是O(n ^ 2)的复杂性。我怎么把它送到O(n)?
这将导致O(n)的复杂性。
(5个答案)
在给定的数字数组中,一个元素将显示一次,其余元素将显示两次。你能在o(n)线性时间内找到那个数吗?
例如-
lonelyNumber([4, 4, 6, 1, 3, 1, 3]) // 6
到目前为止,我在javascript和我的代码中尝试这个-
var lonelyNumber=function(arr) {
for(var i=0;i<arr.length;i++) {
for(var j=0;j<arr.length;j++) {
if(j!==i && arr[i]===arr[j]) {
break;
}
}
if(j===arr.length) {
return arr[i];
}
}
}
console.log(lonelyNumber([4, 4, 6, 1, 3, 1, 3]));
但是这是O(n ^ 2)的复杂性。我怎么把它送到O(n)?
最佳答案
你可以用hashmap来做这个方法是在javascript中使用对象。
基本上,我循环遍历数组,如果第一次找到对象,则添加新的键;如果第二次找到对象,则删除键最后,对象中剩下的唯一键就是结果。
var lonelyNumber=function(arr) {
var obj={};
for(var i=0;i<arr.length;i++) {
if(obj[arr[i]]) {
delete obj[arr[i]];
} else {
obj[arr[i]]=true;
}
}
return Object.keys(obj)[0];
}
这将导致O(n)的复杂性。
10-01 06:43