给出 2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
给出 [1,2,2,1,3,4,3]
,返回 4
给出 [7, 10001, 10002, 10003, 10001, 10002, 10003, 10004, 7, 10004, 91985345, 2, 2, 3, 4, 5, 5, 4, 3, 11, 91985345]
,返回11
有很多解决方式,建议用indexOf
来查找是否有值。
/**
* @param A: An integer array
* @return: An integer
*/
const singleNumber = function (A) {
}
const singleNumber = function (A) {
let [obj, res] = [{}, []];
for (let index of A.keys()) {
if (obj[A[index]] !== undefined) { // 判断出现次数
// 第二次出现
let test = A[index];
delete res[obj[A[index]]]; // 删除数组元素 变为undefined
} else {
// 第一次出现
res.push(A[index]); // 数组元素添加进去
obj[A[index]] = res.length - 1; // 保存下标 用于等下删除第二次出现的元素
}
}
return Number(res.join('')); // 转成字符串 最终只有一个值输出
}
console.log(singleNumber([1, 2, 2, 1, 3, 4, 3]), singleNumber([7, 10001, 10002, 10003, 10001, 10002, 10003, 10004, 7, 10004, 91985345, 2, 2, 3, 4, 5, 5, 4, 3, 11, 91985345]));
const singleNumber = function (A) {
var b = []
for (var i = 0; i < A.length; i++) {
var v = A[i]
// 如果b数组中没有v(没有push过 代表前面没有v)并且A数组在后面也没有该值(也就是后面也没有v)
if (b.indexOf(v) === -1 && A.indexOf(v, i + 1) === -1) {
return v // 前面没有v 后面也没有v 即是唯一的值
}
b.push(v); // 添加v
}
}
console.log(singleNumber([1, 2, 2, 1, 3, 4, 3]), singleNumber([7, 10001, 10002, 10003, 10001, 10002, 10003, 10004, 7, 10004, 91985345, 2, 2, 3, 4, 5, 5, 4, 3, 11, 91985345]));
const singleNumber = function (A) {
for (var i = 0; i < A.length; i++) {
var s = [].concat(A) // 转成本地变量
s.splice(i, 1) // 将该值删除
if (s.indexOf(A[i]) === -1) { // 被删过一次 再查找是否还有这个值
return A[i] // 如果没有的话 即找到该值
}
}
}
console.log(singleNumber([1, 2, 2, 1, 3, 4, 3]), singleNumber([7, 10001, 10002, 10003, 10001, 10002, 10003, 10004, 7, 10004, 91985345, 2, 2, 3, 4, 5, 5, 4, 3, 11, 91985345]));
觉得还不错的话,给我的点个star吧
本文分享自 OBKoro1前端进阶积累 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!