这一题相对简单,但是代码质量可能不是很好,我分享一下我的做题笔记以及做题过程给各位欣赏,有什么不足望各位大佬指出来
原题目,各位小伙伴也可以试着做一下
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]; } }
拿了个第二名哈哈哈~~~
第一名永远是值得羡慕的对象,这样都能少一毫秒[惊讶]