codility 之 OddOccurrencesInArray

題目描述(Task decription):

A non-empty zero-indexed array A consisting of N integers is given. The array contains an odd number of elements, and each element of the array can be paired with another element that has the same value, except for one element that is left unpaired.

For example, in array A such that:

A[0] = 9 A[1] = 3 A[2] = 9
A[3] = 3 A[4] = 9 A[5] = 7
A[6] = 9
the elements at indexes 0 and 2 have value 9,
the elements at indexes 1 and 3 have value 3,
the elements at indexes 4 and 6 have value 9,
the element at index 5 has value 7 and is unpaired.

Write a function:

int solution(vector<int> &A);

that, given an array A consisting of N integers fulfilling the above conditions, returns the value of the unpaired element.

For example, given array A such that:

A[0] = 9 A[1] = 3 A[2] = 9
A[3] = 3 A[4] = 9 A[5] = 7
A[6] = 9
the function should return 7, as explained in the example above.

Assume that:

  • N is an odd integer within the range [1..1,000,000];
  • each element of array A is an integer within the range [1..1,000,000,000];
  • all but one of the values in A occur an even number of times.

Complexity:

  • expected worst-case time complexity is O(N);
  • expected worst-case space complexity is O(1), beyond input storage (not counting the storage required for input arguments).

接替思路:

  1. 由題目要求可知,元素個數為奇數個,只有一個元素是未配對的數;
  2. 先將數組進行排序(使用泛型算法中的方法);
  3. 遍歷數組,每次前進2個位置,如果第i位置與第i+1位置的元素不相等,則,第i位置的元素就是我們要求的數;

PS:感覺我的這個算法并不是很高級,在此拋磚引玉,期待大神的指點。

參考答案:

// you can use includes, for example:
#include <algorithm>

// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;

int solution(vector<int> &A) {
    // write your code in C++14 (g++ 6.2.0)
    sort(A.begin(), A.end());
    
    unsigned i=0;
    for (; i<A.size()-1; i+=2)
    {
        if (A[i] != A[i+1])
        {
            break;
        }
    }
    
    return A[i];
}
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,448評論 0 10
  • **2014真題Directions:Read the following text. Choose the be...
    又是夜半驚坐起閱讀 9,878評論 0 23
  • 認識自己是一次重生 喜歡自己是一次重生 找到夢想是一次重生 總有一些時刻你需要忘掉所有只看自己 才能跳出困境醍醐灌頂
    不丹丹是閱讀 378評論 0 49
  • 1月31號 星期三 天氣晴 今天下午爺爺告訴我,今天有月全食。晚上媽媽下班以后,打開電腦給我們查月全食是怎...
    慕兆峻峰閱讀 865評論 0 3
  • 愛心樹講述的是一個男孩和一顆蘋果樹的故事,一個溫馨、又略帶哀傷的動人故事。男孩不停地向樹索取,樹為男孩獻出了...
    小朱繪本館閱讀 419評論 0 0