LintCode笔记 - 82.落单的数

这一题相对简单,但是代码质量可能不是很好,我分享一下我的做题笔记以及做题过程给各位欣赏,有什么不足望各位大佬指出来

原题目,各位小伙伴也可以试着做一下

82. 落单的数
中文English
给出 2 * n + 1个数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

样例
样例 1:

输入:[1,1,2,2,3,4,4]
输出:3
解释:
仅3出现一次
样例 2:

输入:[0,0,1]
输出:1
解释:
仅1出现一次
挑战
一次遍历,常数级的额外空间复杂度

注意事项
n≤100
做题笔记
我个人进行形象化理解就是,
要么丢进去,要么拿出来,两次的时候就是拿出来,如果只有一次的话那就是丢进去

那么就有两个动作,丢进去、拿出来

先定义一个空数组B,用于作为一个存储状态盒

先循环A的每个数,每一个数都对B数组进行扫描,如果B里存在就删掉,不存在就给添加入B数组,这样一来落单的数字就能出来了。

实现代码

/**
 * @param A: An integer array
 * @return: An integer
 */
const singleNumber = function (A) {
    var b = new Array();
    for (var i = 0; i <= A.length; i++) {
        var found = -1;// 初始化
        for(var j=0;j <= b.length;j++) {
            if (b[j] == A[i]) {
                found = j;
            }
        }
        if (found > -1) {
            b.splice(found,1);// 删除
        }else {
            b.push(A[i]);// 推入
        }
    }
    if (b.length > 0) {// 这一步实际是防止没有落单的数导致报错
    // 实际上这样还能获取多个落单数,这里取一个就够了
        return b[0];
    }
}

拿了个第二名哈哈哈~~~

第一名永远是值得羡慕的对象,这样都能少一毫秒[惊讶]

猜你喜欢

转载自www.cnblogs.com/xiaopanpan0120/p/11122901.html
今日推荐