[LeetCode](面試題56 - II)數組中數字出現的次數 II

題目

在一個數組 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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章