关于体能大比拼题目Round3的多种解法

实现代码:JavaScript

题目很简单,可能几分钟就做出来,但是用到的一些高阶方法确很受益,可能由于要反复调用callback函数,在复杂度上并没有什么优化,但是却可以让代码更加简洁易读,减少工作量!

题目如下:

给出2*n + 1 个的数字(数组),除其中一个数字之外其他每个数字均出现两次,找到这个数字。
eg: function findNum(arr){ ... }

方法一(较为普遍):
function findNum(arr) {
    let array = 0;
    for(let item of arr) {
        for (let term of arr) {
            if (term === item) {
                array++;
            }
        }
        if (array === 1)
            return item;
        array = 0;
    }
}
方法二(异或):
function findNum(arr) {
    let result = [];
    for(let i = 0; i < arr.length; i ++){
        result = result ^ arr[i];
    }
    return result;
}
方法三(数组对象的高阶函数filter()):
function findNum(arr) {
    return arr.filter((elem) => {
            return arr.indexOf(elem) === arr.lastIndexOf(elem);
});
}
这样一道简单的题目却使用JS 内置高阶函数却可以大大减少代码量,JS学习还需多总结多实践呐~~~

你可能感兴趣的:(关于体能大比拼题目Round3的多种解法)