NC156 数组中只出现一次的数(其它数出现k次)

1.类型:位运算

2.描述:

image.png

3.思路

最初自己看到题的想法:把这个数组循环存到对象中,值作为键,次数作为值。然后循环找到值为1的键。

4.代码

解法1:排序
先对数组排序,然后循环遍历这个数组,判断i和i+1位置上的元素是否相等,如果相等,根据所给k值,改变i的值(将下标直接改变到和第k个的第i个元素,通过i++遍历的元素就到了下一个不同的元素);如果不等,那就直接返回arr[i]这个元素。

function foundOnceNumber( arr ,  k ) {
    // write code here
    arr.sort();
    for(let i = 0; i < arr.length - 1; i++) {
        if (arr[i] == arr[i + 1]) {
            i += k -1;
        }else {
            return arr[i];
        }
    }
    return arr[arr.length - 1];
}
module.exports = {
    foundOnceNumber : foundOnceNumber
};

为什么i += k -1;?根据不同的k值找出的规律,最后一个相同的下标是,i= i+k-1

image.png
image.png

你可能感兴趣的:(NC156 数组中只出现一次的数(其它数出现k次))