반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[codility] Dominator 본문

이직

[codility] Dominator

닉의네임 2022. 8. 8. 15:01
반응형

An array A consisting of N integers is given. The dominator of array A is the value that occurs in more than half of the elements of A.

For example, consider 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 dominator of A is 3 because it occurs in 5 out of 8 elements of A (namely in those with indices 0, 2, 4, 6 and 7) and 5 is more than a half of 8.

Write a function

class Solution { public int solution(int[] A); }

that, given an array A consisting of N integers, returns index of any element of array A in which the dominator of A occurs. The function should return −1 if array A does not have a dominator.

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.

Write an efficient algorithm for the following assumptions:

  • 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].
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;



public static int solution(int[] A) {

        Map<Integer, Integer> map = new HashMap<>();

        for (int a : A) {
            map.put(a, map.getOrDefault(a, 0) + 1);
        }

        List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());
        list.sort(Map.Entry.<Integer, Integer>comparingByValue().reversed());

        int ret = -1;

        if(list.size() < 1){
            return ret;
        }

        if (map.get(list.get(0).getKey()) > A.length / 2) {
            int key = list.get(0).getKey();
            int[] R = new int[map.get(list.get(0).getKey())];
            int j = 0;
            for (int i = 0; i < A.length; i++) {
                if (A[i] == key) {
                    R[j] = i;
                    j++;

                }
            }
            ret = R[0];
        }
        return ret;
}
반응형

'이직' 카테고리의 다른 글

[groom] 구름이의 취미  (0) 2023.05.13
[programmers] 같은 숫자는 싫어  (0) 2022.08.28
TwoSum  (0) 2022.07.27
hadoop 준비  (1) 2022.07.27
[codility] Nesting  (0) 2022.07.26
Comments