Leetcode Java Kth Largest Element in a Stream
업데이트:
문제
코드
class KthLargest {
private Queue<Integer> queue;
private int k;
public KthLargest(int k, int[] nums) {
this.k = k;
this.queue = new PriorityQueue<Integer>(k);
for (int num : nums) {
this.add(num);
}
}
public int add(int val) {
this.queue.offer(val);
if (this.queue.size() > k) {
this.queue.poll();
}
return this.queue.peek();
}
}
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest obj = new KthLargest(k, nums);
* int param_1 = obj.add(val);
*/
결과
설명
- k번째로 큰 값을 반환하는 스트림 객체를 만드는 문제이다.
- 생성자인 KthLargest(int k, int[] nums)는 k번째 큰 값을 찾을 k와 초기 스트림인 nums를 이용하여 객체를 초기화한다.
- 메서드인 add(int val)는 val 값을 스트림에 넣어주고, k번째 큰 값을 반환한다.
- 문제 풀이에 필요한 변수를 정의한다.
- queue는 스트림의 값들을 차례대로 저장할 변수이다.
- k는 스트림의 k번째 큰 값을 저장할 변수이다.
- 생성자인 KthLargest(int k, int[] nums)를 완성한다.
- k에 주어진 k를 넣어 저장한다.
- queue에 k번째 큰 값을 유지하기 위해 k 크기의 PriorityQueue로 초기화한다.
- 메서드인 add(int val)를 완성한다.
- queue에 val 값을 넣어준다.
- queue의 크기가 k를 초과하는 경우, 가장 앞의 큰 값을 꺼내준다.
- qeuue의 맨 앞의 값은 k번째로 큰 값을 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기