Я пытаюсь решить следующие ката: 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, чтобы найти единственный уникальный элемент. Этот процесс должен быть быстрее, чем текущее решение. Как мне это оптимизировать?