Leetcode--137.Single Number II

来源:互联网 发布:装甲少女 知乎 编辑:程序博客网 时间:2024/05/21 12:02

题目

Given an array of integers, every element appears three times except for one, which appears exactly once. Find that single one.

Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

思路

这道题就是除了一个单独的数字之外,数组中其他的数字都出现了三次,那么还是要利用位操作 Bit Operation 来解此题。我们可以建立一个32位的数字,来统计每一位上1出现的个数,我们知道如果某一位上为1的话,那么如果该整数出现了三次,对3去余为0,我们把每个数的对应位都加起来对3取余,最终剩下来的那个数就是单独的数字。

代码

class Solution {public:    int singleNumber(vector<int>& nums) {        int res = 0;        for(int i=0; i<32; i++){            int sum = 0;            for(int j=0; j<nums.size(); j++){                sum += (nums[j]>>i)&1;            }            res |= (sum%3) << i;        }        return res;    }};
原创粉丝点击