[leetcode] Single Number 2 | 一个数组除了x以外全都正好出现三次,求x
Posted October 7, 2013
on:bit好久没看真是全尼玛忘了。那些最基本的:
- 显现a的第i位: a & 1 << i
- 把a的第i位置零:a &= ~(1 << i)
- 把result给populate回来:result |= 1 << i
创建一个长度为32的数组a,a[i]表示所有数字在i位出现的次数。假如a[i]是3的整数倍,则忽略;否则就把该位取出来组成答案。空间复杂度O(1).
public int singleNumber(int[] A) { int[] bv = new int[32]; for (int i = 0; i < A.length; i++) { for (int j = 0; j < 32; j++) { bv[j] += (A[i] & (1 << j)) == 0 ? 0 : 1; } } int res = 0; for (int i = 0; i < 32; i++) { if (bv[i] % 3 != 0) { res |= 1 << i; } } return res; }
Leave a Reply