Algorithm/codility

Lesson8. Leader - Dominator

nuKeguyS 2018. 7. 24. 16:00

Dominator - Find an index of an array such that its value occurs at more than half of indices in the array.

https://app.codility.com/programmers/lessons/8-leader/dominator/

문제요약

N개의 정수 배열 A가 주어지고 A에서 A의 길이의 절반보다 많이 등장하는 수를 dominator라고 한다. A의 dominator의 index 중 하나를 반환하거나 없으면 -1을 반환한다.

Assume that:

N is an integer within the range [0..100,000];

each element of array A is an integer within the range [−2,147,483,648..2,147,483,647].

For example, given array A such that

 A[0] = 3    A[1] = 4    A[2] =  3

 A[3] = 2    A[4] = 3    A[5] = -1

 A[6] = 3    A[7] = 3

the function may return 0, 2, 4, 6 or 7, as explained above.

Complexity:

expected worst-case time complexity is O(N);

expected worst-case space complexity is O(1) (not counting the storage required for input arguments).

풀이

A의 각각에 대해 dictionary에 해당 수의 개수를 counting하면서 A의 절반보다 큰 경우에 해당 index를 반환한다. 전체를 다 처리하고 반환되지 않은 경우는 존재하지 않는 경우로 -1을 반환한다.