[LeetCode] Single Number II

来源:互联网 发布:单片机连接摄像头 编辑:程序博客网 时间:2024/06/07 05:38

题目

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?

注意:算法应该具有线性运行时的复杂性。 你可以实现它而不使用额外的内存吗?

分析

将数组中每个元素认定为一个 32 位的二进制数,这样每一位只可能是 0 或 1 。

对于整个数组,统计每一位上 1 出现的次数,必定是 3N 或 3N + 1 次。将这个次数对 3 取模,即可获得只出现一次的元素在该位上的值(0 huo 1)。

代码

#include <iostream>#include <vector>using namespace std;class Solution {public:    int singleNumber(vector<int>& nums) {        int number = 0;        for (int i = 0; i < 32; i++) {            int count = 0;            int temp = 1 << i;            for (int j = 0; j < nums.size(); j++) {                if (nums[j] & temp)                    count++;            }            if (count % 3)                number |= temp;        }        return number;    }};int main() {    int num[] = {1, 1, 1, 2, 3, 3, 3};    int length = sizeof(num) / sizeof(int);    vector<int> nums(num, num + length);    Solution solution;    int number = solution.singleNumber(nums);    cout << "The single number is " << number << endl;}

真值表解法

CSDN 博客:http://blog.csdn.net/yutianzuijin/article/details/50597413

原创粉丝点击