Leetcode 137. 只出现一次的数字 II - 题解
137. Single Number II
在线提交:
https://leetcode.com/problems/single-number-ii/
题目描述
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,3,2]
输出: 3
示例 2:
输入: [0,1,0,1,0,1,99]
输出: 99
● 题目难度: | 中等 |
-
通过次数:2.1K
-
提交次数:3.6K
-
贡献者:LeetCode
-
相关话题 位运算
相似题目 只出现一次的数字 只出现一次的数字 III
分析:
如果能设计一个状态转换电路,使得一个数出现3次时能自动抵消为0,最后剩下的就是只出现1次的数。使用两个bit a和b分别来记录该位上实际的值~
0 -> 1 -> 2 -> 0
00 -> 01 -> 10 -> 00
a b
0 0
0 -> 0 0 -> 1
0 -> 1 1 -> 0
1 -> 0 0 -> 0
变成2进制,1个1个bit地处理~
数字电路(状态机) 翻转逻辑:
b flip: !a
a flip: !b calculated
return b
已AC代码:
public class Solution
{
public int SingleNumber(int[] nums)
{
int a = 0, b = 0;
for(int i = 0;i < nums.Length;i++)
{
b = (b ^ nums[i]) & ~a;
a = (a ^ nums[i]) & ~b;
}
return b;
}
}
Rank:
You are here!
Your runtime beats 98.48% of csharp submissions.
相关链接:
[LeetCode] Single Number II 单独的数字之二 - Grandyang - 博客园
http://www.cnblogs.com/grandyang/p/4263927.html