Leetcode Java Kth Largest Element in an Array
업데이트:
문제
코드
class Solution {
public int findKthLargest(int[] nums, int k) {
Queue<Integer> queue = new PriorityQueue<>();
for (int num : nums) {
queue.add(num);
if (queue.size() > k) {
queue.poll();
}
}
return queue.poll();
}
}
결과
설명
-
주어진 정수 배열 nums의 k번째 큰 숫자를 찾아 반환하는 문제이다.
- 숫자를 순위를 지정하여 저장하고 활용하기 위해서 PriorityQueue를 정의한다.
- PriorityQueue는 기본적으로 낮은 숫자가 우선적으로 정렬되어 관리과 되며, 기존 Queue의 FILO방식이 아니다.
- 예를 들어, 아래와 같이 3 -> 1 순으로 넣으면 1 -> 3 순으로 나오게 된다.
Queue<Integer> queue = new PriorityQueue<>(); queue.add(3); queue.add(1); System.out.println(queue.poll()); // 1 System.out.println(queue.poll()); // 3
- 하지만, 반대의 순서도 가능하다.
Queue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder()); queue.add(3); queue.add(1); System.out.println(queue.poll()); // 3 System.out.println(queue.poll()); // 1
- 예를 들어, 아래와 같이 3 -> 1 순으로 넣으면 1 -> 3 순으로 나오게 된다.
- 위의 PriorityQueue의 특성으로 Queue의 크기를 k까지 관리하면, k번째로 큰 값은 Queue의 가장 앞에 저장이 되게 된다.
- PriorityQueue는 기본적으로 낮은 숫자가 우선적으로 정렬되어 관리과 되며, 기존 Queue의 FILO방식이 아니다.
- 주어진 배열인 nums의 값들을 반복하여 Queue에 값들을 넣어 크기를 관리한다.
- queue에 nums에 속한 숫자인 num을 넣어준다.
- queue의 크기가 k보다 크게 되면, queue.poll()을 통해서 Queue 내의 가장 작은 값을 빼고 반복을 계속 수행한다.
- 반복이 완료되면 주어진 배열인 nums의 가장 큰 k번째 값까지 저장된 queue에서 가장 작은 숫자인 k번째 큰 값을 빼서 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기