LeetCode 137 Single Number II
来源:互联网 发布:白金数据小说叫什么 编辑:程序博客网 时间:2024/04/29 23:40
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
1 如果可以使用额外的空间,考虑HashTable。
2 和single number 一样( http://blog.csdn.net/xift810/article/details/19772473 ),都要考虑底层,也就是从bit的角度来进行突破。可以发现 如果是 111 2,那么最后一位都3个1 ,倒数第二位是1个1;如果是 1113 那么最后一位是4个1,倒是第二位是2个1 。。。。可以发觉每一位 %3之后,得到的值要么是1,要么是0。因为只要出现过3次的,在相同位相加然后%3后,都自然为0。最后剩下的就是唯一出现过一次的那个数字的二进制表示。
3 这个方法可以应用到出现过任何次数的时候。
public class Solution { public int singleNumber(int[] A) { if(A.length==0){ return 0; } int[] record = new int[32]; for(int i=0;i<32;i++){ int cnt =0; for(int j=0;j<A.length;j++){ if(((A[j]>>i)&1)!=0){ cnt++; } } record[i]=cnt%3; } int ans=0; for(int i=0;i<32;i++){ ans|=(record[i]<<i); } return ans; }}
另外看到一个特别有趣的方式,练32位数组都不用了
int sol2(int A[], int n)
{
int one = 0, two = 0, three = 0;
for (int i = 0;i < n;++i) {
two |= one & A[i]; 新的那个数和出现过一次(one) & 就是出现过两次,加到Two里面
one ^= A[i]; 和one ^ 如果没出现过,什么都不会发生;如果出现过,自然消失。
three = one & two; 如果出现第三次的必然是one 和 two的合并内容
one &= ~three; 把第三次出现的从one删除
two &= ~three; 把第三次出现的从two删除
}
return one;
}
- LeetCode 137 Single Number II
- LeetCode 137 Single Number II
- leetCode: Single Number II [137]
- [leetcode 137] Single Number II
- leetcode-137 Single Number II
- leetcode || 137、Single Number II
- LeetCode 137:Single Number II
- 【leetcode】【137】Single Number II
- LeetCode---(137)Single Number II
- leetcode[137]:Single Number II
- leetcode 137: Single Number II
- Leetcode #137 Single Number II
- leetcode: (137) Single Number II
- LeetCode 137: Single Number II
- 【leetcode】【137】Single Number II
- LeetCode 137 Single Number II
- [leetcode 137] Single Number II
- LeetCode 137 Single Number II
- errno错误码含义及使用
- C#获取当前程序运行路径的方法集合
- 最短的名字
- Android sdk manager 显示 “Done loading packages”,该怎么办?
- 有关led灯
- LeetCode 137 Single Number II
- 增强PL/SQL中查询CLOB或者LONG类型的可读性
- 线性链表--顺序链表实现(c语言)
- 匿名类
- 亚信面试回忆
- java类型转换
- 计数的梦
- 树uva112
- HDU 1395 2^x mod n = 1