Leetcode 137.只出现一次的数字II

只出现一次的数字II

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:

输入: [2,2,3,2]

输出: 3

示例 2:

输入: [0,1,0,1,0,1,99]

输出: 99

 

将int数分为32位,那么按该题的要求,这32位的每一位,所出现过的数目必定是3N或3N+1,3N+1的位级必然是那唯一的一个元素贡献的。对int数res的每个位进行数组位与遍历,出现3N+1的即保留下来,最终刷完32位之后,可得结果。

 

 1 class Solution{
 2 public:
 3     int singleNumber(vector<int>& nums){
 4         int length = nums.size();
 5         int result = 0;
 6         for (int i = 0; i<32; i++){
 7             int count = 0;
 8             int mask = 1 << i;
 9             for (int j = 0; j<length; j++){
10                 if (nums[j] & mask)
11                     count++;
12             }
13             if (count % 3)
14                 result |= mask;
15         }
16         return result;
17     }
18 };

 

posted on 2018-12-27 22:24  kexinxin  阅读(86)  评论(0编辑  收藏  举报

导航