글
A non-empty zero-indexed array A consisting of N integers and sorted in a non-decreasing order is given. The leader of this array is the value that occurs in more than half of the elements of A.
You are given an implementation of a function:
class Solution { public int solution(int[] A); }
that, given a non-empty zero-indexed array A consisting of N integers, sorted in a non-decreasing order, returns the leader of array A. The function should return −1 if array A does not contain a leader.
For example, given array A consisting of ten elements such that:
A[0] = 2
A[1] = 2
A[2] = 2
A[3] = 2
A[4] = 2
A[5] = 3
A[6] = 4
A[7] = 4
A[8] = 4
A[9] = 6
the function should return −1, because the value that occurs most frequently in the array, 2, occurs five times, and 5 is not more than half of 10.
Given array A consisting of five elements such that:
A[0] = 1
A[1] = 1
A[2] = 1
A[3] = 1
A[4] = 50
the function should return 1.
Unfortunately, despite the fact that the function may return expected result for the example input, there is a bug in the implementation, which may produce incorrect results for other inputs. Find the bug and correct it. You should modify at most three lines of code.
Assume that:
N is an integer within the range [1..100,000];
each element of array A is an integer within the range [0..2147483647];
array A is sorted in non-decreasing order.
Complexity:
expected worst-case time complexity is O(N);
expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).
Elements of input arrays can be modified.
initial code
int solution(int[] A) {
int n = A.length;
int[] L = new int[n + 1];
L[0] = -1;
for (int i = 0; i < n; i++) {
L[i + 1] = A[i];
}
int count = 0;
int pos = (n + 1) / 2;
int candidate = L[pos];
for (int i = 1; i <= n; i++) {
if (L[i] == candidate)
count = count + 1;
}
if (count > pos)
return candidate;
return (-1);
}
=> answer 100/100 드디어 100점이 나오다.
import java.util.*; class Solution { int solution(int[] A) { int n = A.length; int[] L = new int[n + 1]; L[0] = -1; for (int i = 0; i < n; i++) { L[i + 1] = A[i]; } int count = 0; int pos = (n + 1) / 2; int candidate = L[pos]; for (int i = 1; i <= n; i++) { if (L[i] == candidate) count = count + 1; } if (n%2==0 ? count > pos : count > pos -1) // <=========== return candidate; return (-1); } }
'프로그래밍 > 알고리즘' 카테고리의 다른 글
CountMultiplicativePairs (0) | 2014.12.12 |
---|---|
Get Leader of the array in the value that occurs in more than half of the elements of A. (0) | 2014.12.10 |
Min Average Two Slice by Codility (0) | 2014.12.09 |
RECENT COMMENT