leetcode_137_只出现一次的数字II

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。

说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:输入:[2,2,3,2]输出:3

示例 2:输入:[0,1,0,1,0,1,99]输出:99

我的思路:先将其排序,这样就得到了一个顺序的数组,找到其中与相邻元素不等的就是我们需要寻找的数

代码实现:(不知道怎么总复制不全,敲又懒。。。索性截了图。。。)

其他更高效的解法:

    1)统计每一位bit上‘1’的个数,如果结果为3的倍数,说明只出现一次的数字在该bit上的值为0,否则为1,如此计算每一位就可得到结果。

具体讲解参见:LeetCode——Single Number II(找出数组中只出现一次的数2) - 苍枫露雨 - 博客园

    2)这个问题之前有一个简单的版本,即其余数字都出现两次,当时用“异或”处理得到了结果(将数组内所有元素进行异或,因为一个数与它本身异或等于0,与0异或等于它本身)。这里,题目更改为出现三次,所以我们不妨借鉴其思路,用二进制模拟三进制对其进行处理。

具体讲解参见:leetcode Single Number II - 位运算处理数组中的数 - 代金桥 - 博客园

                                                                咯咯咯

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,776评论 0 33
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 17,941评论 2 36
  • 数组 记录《剑指offer》中所有关于数组的题目,以及LeetCode中的相似题目 相关题目列表 说明 由于简书...
    wenmingxing阅读 1,533评论 1 12
  • Java 中位运算符有与(&)、或(|)、非(~)、异或(^)、左移(<<)、右移(>>)、无符号右移(>>>),...
    JohnnyShieh阅读 1,140评论 0 0
  • 人生匆匆数万日,精力有限,每一寸光阴都不该消耗在怨艾、伤害、嫉妒和欺骗之上。草在结籽,树在结果实,荧火虫在暗夜无声...
    云朵朵angel阅读 675评论 1 1