Single Number II

来源:互联网 发布:特别想找个女朋友知乎 编辑:程序博客网 时间:2024/06/05 03:32

题目:Given an array of integers, every element appears three times except for one. Find that single one.

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

思路:

非常好的题目,设一个三十二维的数组,把nums数组的每一个数字按照位大小从前到后计算在当前位的出现1的次数。


如图所示,最后可以发现如果不是三的倍数,则可以求解出来,见代码,到这边就容易理解了。

代码:

class Solution {public://第二种解法:位操作法    int singleNumber(vector<int>& nums) {        int count[32]={0};        int result=0;        for(int i=0;i<32;i++){            for(int j=0;j<nums.size();j++){                if(nums[j]>>i&1){                    //它是一位一位的操作,当i=3的时候,count[j]<<3,右移3位,使得能够计算第三位的总出现数。当然最终判断是否是3的倍数                    count[i]++;                }            }            result |= (count[i]%3)<<i;//一开始卡在这里,没能够想到 如果一个数单独出现1次,那么一定是每一位都不是3的倍数,所以            //count[i]%3<<i才有意义        }        return result;    }};


0 0