如何查找数组中是否每个元素都出现两次(一个除外),或者只有一个元素的数组出现两次?

时间:2020-03-08 19:39:25

标签: javascript math

我正在尝试解决以下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操作来查找唯一的唯一元素。该过程应该比当前解决方案更快。我该如何优化呢?

0 个答案:

没有答案