[LeetCode] 137. Single Number II

只出现一次的数字II。题意跟版本一几乎一样,唯一不同的地方是版本一其他数字出现了两次,版本二其他数字出现了三次。例子,

Example 1:

Input: [2,2,3,2]
Output: 3

Example 2:

Input: [0,1,0,1,0,1,99]
Output: 99

这道题我先写一个我自己能看得懂的思路吧,discussion的高票答案我没有看懂。我的思路是建立一个32位的数字,来统计每一位上出现1的次数。如果某一个数字出现了三次,那么只要对32位上每一位%3,为0的那些数位就能拼凑出这个出现了3次的数字了。

时间O(n) - 遍历了N个数字

空间O(1)

Java实现

 1 class Solution {
 2     public int singleNumber(int[] nums) {
 3         int res = 0;
 4         for (int i = 0; i < 32; i++) {
 5             int sum = 0;
 6             for (int j = 0; j < nums.length; j++) {
 7                 sum += (nums[j] >> i) & 1;
 8             }
 9             res |= (sum % 3) << i;
10         }
11         return res;
12     }
13 }

 

JavaScript实现

 1 var singleNumber = function(nums) {
 2     let res = 0;
 3     for (let i = 0; i < 32; i++) {
 4         let sum = 0;
 5         for (let j = 0; j < nums.length; j++) {
 6             sum += (nums[j] >> i) & 1;
 7         }
 8         res |= sum % 3 << i;
 9     }
10     return res;
11 };

 

你可能感兴趣的:([LeetCode] 137. Single Number II)