【算法編程】找出只出現一次的數-singleNumber

題目意思:

一個數值數組中,大部分的數值出現兩次,只有一個數值只出現過一次,求編程求出該數字。
要求,時間複雜度爲線性,空間複雜度爲O(1).

解題思路:

1.先排序,後查找。

由於排序的最快時間是O(nlogn), 所以這種方法不能滿足時間的要求。

2.其它技巧來解決:

根據基本的計算機組成原理的知識,採用”異或運算“來巧妙的完成,

異或運算很簡單:

0^0=0
1^1=0
1^0=0^1=1

也就是說相同則爲0,不同則爲1.

所以任何相同的兩個數的異或運算值結果爲0。

0與任何數進行異或運算等於該值。

所以,我們只需要將所有的數字進行異或運算一次(O(N)),它的結果就是我們要找的,只出現過一次的值。

#include <iostream>
#include<vector>
using namespace std;

//Given an array of integers, every element appears twice except for one. Find that single one.
//Note:
//Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
class Solution {
public:
    int singleNumber(vector<int>& nums)
    {
        vector<int>::iterator it;
        it=nums.begin();
        int sum=*it;
        for (it=nums.begin()+1;it<nums.end();it++)
        {
            sum=sum^(*it);
        }

        return sum;
    }
};
int main()
{
    Solution instance =  Solution();
    vector<int> nums;
    std::vector<int>::iterator it;
    it = nums.begin();
    int t;
    while(cin>>t)
    {
        it =nums.insert (it,t);
    }

    cout << instance.singleNumber(nums) << endl;
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章