关于体能大比拼题目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学习还需多总结多实践呐~~~
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容