題目
在一個數組 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
解題思路
如果一個數字出現三次,那麼它的二進制表示的每一位(0或者1)也出現三次。如果把所有出現三次的數字的二進制表示的每一位都分別加起來,那麼每一位的和都能被3整除。如果某一位的和能被3整除,說明目標數字在二進制表示中當前位上是0;如果不能被3整除,說明目標數字在二進制表示中當前位上爲1。
複雜度分析:
時間複雜度:O(N)。
空間複雜度:O(1)。
代碼
class Solution {
public int singleNumber(int[] nums) {
int res = 0;
for(int i=0; i<32; i++){
int count = 0;
for(int num : nums){
// 統計當前位置爲1的數字的數量
if((num & (1<<i)) != 0){
count++;
}
}
if(count%3 != 0){
res += (1<<i);
}
}
return res;
}
}