leetcode算法

Single Number II

問題描述

Given an array of integers, every element appears three times except for one. Find that single one. single-number-ii

解決方案

  • 思路1
int singleNumber(vector<int>& nums)
{
    //特殊情況1
    if(nums.size() == 0)
    {
        return 0;
    }

    //特殊情況2
    if(nums.size() == 1)
    {
        return nums.at(nums.size()-1);
    }

    size_t count = 1;

    sort(nums.begin(), nums.end());

    for(size_t index=0; index<nums.size()-1; ++index)
    {
        if(nums.at(index) == nums.at(index+1))
        {
            count++;
        }
        else
        {
            if(count < 3)
            {
                return nums.at(index);
            }

            count = 1;
        }
    }

    //特殊情況3 最后一個是single number的特殊情況
    return nums.at(nums.size()-1);
}
  • 思路2
int singleNumber(vector<int>& nums)
{
    int result = 0;
    vector<int> count(32, 0);

    for(int i=0; i<count.size(); ++i)
    {
        for(int j=0; j<nums.size(); ++j)
        {
            count[i] += 1 & (nums.at(j) >> i);
        }
    }

    for(int i=0; i<count.size(); ++i)
    {
        if(count.at(i) %3 != 0)
            result = result + (1<<i);
    }
    return result;
}
  • 思路2
int singleNumber(vector<int>& nums)
{
    int counterOne = 0;
    int counterTwo = 0;

    for (int i = 0; i < nums.size(); i++)
    {
        counterOne = (~counterTwo) & (counterOne ^ nums[i]);
        counterTwo = (~counterOne) & (counterTwo ^ nums[i]);
    }

    return counterOne;    
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容