前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法-落单的数

算法-落单的数

作者头像
OBKoro1
发布2020-10-27 11:54:57
3300
发布2020-10-27 11:54:57
举报
文章被收录于专栏:OBKoro1的前端分享

落单的数

难度:简单

描述:

给出 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来查找是否有值。

代码模板:

代码语言:javascript
复制
/**
 * @param A: An integer array
 * @return: An integer
 */
const singleNumber = function (A) {
}

想一想再看答案

想一想再看答案

想一想再看答案

代码:

  1. 转对象,如果第二次出现,删除该值,最后只剩一个值
代码语言:javascript
复制
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]));
  1. 查找该值的前后是否有该值,如果没有,即找到落单的值
代码语言:javascript
复制
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]));
  1. 转成本地变量操作,将该值删除,再查找是否有该值,如果没有即找到该值
代码语言:javascript
复制
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吧

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-10-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OBKoro1前端进阶积累 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 落单的数
    • 难度:简单
      • 描述:
        • 样例:
          • 思路分析:
            • 代码模板:
              • 想一想再看答案
                • 想一想再看答案
                  • 想一想再看答案
                    • 代码:
                      • 鼓励我一下:
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档