Как мне найти, если в массиве каждый элемент встречается дважды, кроме одного ИЛИ массива, в котором дважды встречается только один элемент? - PullRequest
1 голос
/ 08 марта 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...