function solution(A) {
var returnNumber = -1;
var tempArray = new Array();;
for(i=0; i < A.length; i++){
var newIndex = A[i];
if( tempArray[newIndex] === undefined){
tempArray[newIndex] = 1;
}
else{
tempArray[newIndex] += 1;
}
}
for(j = 0; j < A.length; j++){
if(tempArray[A[j]] == 1){
returnNumber = A[j];
break;
}
}
return returnNumber;
}
//var A = [1, 4, 3, 3, 1, 2, 0, 0]; //returns 4
var A = [22, 25, 3, 3, 1, 2, 0, 0,100,22,25,1,2]; // returns 100
solution(A)
有人可以创造更优雅的解决方案吗?欢迎提出任何意见。
答案 0 :(得分:2)
[编辑] 怎么样:
// checks for duplictes before and after current node
function find1 (ls) {
return ls.find(function (n, idx, ls) {
return (idx == ls.indexOf(n)) && (-1 == ls.indexOf(n, idx + 1));
});
}
对我来说看起来很优雅,并且表现相同。
答案 1 :(得分:1)
1)复制阵列(O(N))
2)编写快速排序对副本进行排序(O(N * log(N))),然后:
3)搜索第一个唯一的:
这3个点使O(N *(log(N)+1))简单地为(O(N * log(N)))。
所以最后你得到O(N)+ 2 *(O(N log(N))),这又是(O(N log(N)))。