我正在尝试解决以下kata:https://www.codewars.com/kata/583ef2456e39941f810001c5/javascript
这是我到目前为止尝试过的:
function countFrequency(arr){
let countMap = {
};
for(let i = 0 ; i < arr.length; i++){
if(countMap[arr[i]] == null){
countMap[arr[i]] = 1;
}
else{
countMap[arr[i]] += 1;
}
}
return countMap;
}
function duplicateOrUnique(arr){
let type1 = true;
countMap = countFrequency(arr);
let count = 0;
for(let key in countMap){
if(countMap[key] >= 2){
count+=1;
}
if(count >= 2){
type1 = false;
break;
}
}
if(type1){
arrSum = arr => arr.reduce((a,b) => a + b, 0);
k = arr.length -1 ;
return Math.abs(arrSum(arr) - (k*(k + 1)/2));
}
else{
arrXor = arr => arr.reduce((a,b) => a ^ b, 0);
return arrXor(arr)
}
}
我已经使用n*(n+1)/2
公式来查找情况1中的重复元素,而我已经使用XOR操作来查找唯一的唯一元素。该过程应该比当前解决方案更快。我该如何优化呢?