在一個數組 nums 中除一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。
示例 1:
輸入:nums = [3,4,3,3]
輸出:4
示例 2:
輸入:nums = [9,1,7,9,7,9,7]
輸出:1
限制:
1 <= nums.length <= 10000
1 <= nums[i] < 2^31
解題思路
對于所有元素的二進制位的第i位而言,出現1的次數必然為3*n+1或者3 *n,因為只出現一次的那個數字在該位上可能為1或者0,但是其他數字都出現3次,所以出現1的次數必然為3的倍數。
因此我們只需要判斷該位上,出現1的次數是否為3*n+1,就可以知道只出現一次的那個數字在該位是否為1,進而還原出整個數字。
代碼
class Solution {public int singleNumber(int[] nums) {int res=0;for (int i=0;i<31;i++){int cur=0;for (int j=0;j<nums.length;j++) {cur+=(nums[j]&1);nums[j]>>=1;}if(cur%3==1){res|=(1<<i);}}return res;}
}