
import java.util.Arrays;
import java.util.Collections;
class Solution {
public int findKthLargest(int[] nums, int k) {
Integer[] numsWrapper = Arrays.stream(nums).boxed().toArray(Integer[]::new);
Arrays.sort(numsWrapper, Collections.reverseOrder());
return numsWrapper[k - 1];
}
}
문제가 너무 쉬워서 아주 빨리 풀었는데 배열을 재정렬 하기 때문에 시간 복잡도가 O(n log n)이다..
💡 풀이 포인트
- min-heap 활용
- PriorityQueue는 기본적으로 최소 힙을 생성한다.
- 힙의 크기를 k로 유지하기 때문에 힙의 루트 값(peek()) = k번째로 큰 값
- 배열의 각 요소를 힙에 넣고 힙의 크기가 k보다 커지면 poll()로 가장 작은 요소 제거
- 이 외에 Quickselect 알고리즘 사용하는 방법이 있으나 코드가 길었음.
import java.util.PriorityQueue;
public class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
// 배열의 각 요소를 처리
for (int num : nums) {
// 힙에 추가
minHeap.offer(num);
// 힙의 크기가 k보다 크면 가장 작은 요소를 제거
if (minHeap.size() > k) {
minHeap.poll();
}
}
// k번째로 큰 값 반환
return minHeap.peek();
}
}
'자율 학습 > 스터디' 카테고리의 다른 글
| [LeetCode75] Find Peak Element (0) | 2025.04.01 |
|---|---|
| [LeetCode 75] 700. Search in a Binary Search Tree (0) | 2025.03.28 |
| [LeetCode] 2352. Equal Row and Column Pairs (0) | 2025.03.18 |
| [LeetCode] 2215. Find the Difference of Two Arrays (0) | 2025.03.18 |
| [LeetCode] 933. Number of Recent Calls (0) | 2025.03.11 |