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];
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 12,178评论 0 10
  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 13,496评论 0 23
  • 认识自己是一次重生 喜欢自己是一次重生 找到梦想是一次重生 总有一些时刻你需要忘掉所有只看自己 才能跳出困境醍醐灌顶
    不丹丹是阅读 2,833评论 0 49
  • 1月31号 星期三 天气晴 今天下午爷爷告诉我,今天有月全食。晚上妈妈下班以后,打开电脑给我们查月全食是怎...
    慕兆峻峰阅读 4,502评论 0 3
  • 爱心树讲述的是一个男孩和一颗苹果树的故事,一个温馨、又略带哀伤的动人故事。男孩不停地向树索取,树为男孩献出了...
    小朱绘本馆阅读 3,085评论 0 0

友情链接更多精彩内容