일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- high level client
- 파이썬
- Python
- license delete
- zip 암호화
- query
- sort
- Kafka
- docker
- analyzer test
- matplotlib
- aggs
- License
- zip 파일 암호화
- licence delete curl
- ELASTIC
- MySQL
- plugin
- API
- token filter test
- aggregation
- springboot
- 900gle
- Elasticsearch
- TensorFlow
- 차트
- Mac
- flask
- Test
- Java
- 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 |