일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- springboot
- Mac
- licence delete curl
- 차트
- token filter test
- ELASTIC
- sort
- Python
- Kafka
- matplotlib
- API
- high level client
- MySQL
- analyzer test
- License
- flask
- license delete
- aggregation
- TensorFlow
- docker
- Java
- 파이썬
- Elasticsearch
- plugin
- 900gle
- zip 파일 암호화
- zip 암호화
- Test
- aggs
- query
- Today
- Total
개발잡부
[codility] Dominator 본문
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 |