📑 문제
정수 배열과 정수 k가 주어지면, 해당 배열에서 k번째로 큰 요소를 찾아야 합니다.
📑 문제 접근 방법
두 가지 방법을 사용해서 문제를 해결했습니다.
먼저, 배열 nums를 오름차순으로 정렬합니다. 이렇게 하면 배열의 가장 큰 숫자가 맨 뒤에 위치하게 됩니다.
그런 다음, nums 배열을 순회하면서 k번째로 큰 요소를 찾습니다. 이를 위해 반복문을 사용하고, 배열의 길이에서 k를 뺀 값 (nums.length - k)의 인덱스에 해당하는 요소가 k번째로 큰 요소입니다.
찾은 k번째로 큰 요소를 반환합니다.
먼저, 우리는 PriorityQueue인 maxHeap을 생성합니다. 이 maxHeap은 내림차순으로 요소를 정렬하게 됩니다.
그런 다음, 배열 nums를 순회하면서 모든 요소를 maxHeap에 넣습니다. 이렇게 하면 가장 큰 숫자가 맨 위에 위치하게 됩니다.
그리고 k번째로 큰 요소를 찾기 위해 while 루프를 사용합니다. 루프가 끝나면 maxHeap에는 k번째로 큰 요소만 남게 됩니다.
maxHeap에서 poll() 메서드를 사용하여 k번째로 큰 요소를 반환합니다.
📑 code
import java.util.PriorityQueue;
class Solution {
public int findKthLargest(int[] nums, int k) {
if (nums.length == 0 || k == 0) {
return 0;
}
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);
for (int num : nums) {
maxHeap.offer(num);
}
while (k > 1) {
maxHeap.poll(); // 큐에서 큰 요소를 제거하여 k-1번째로 큰 요소 찾기
k--;
}
return maxHeap.poll(); // k번째로 큰 요소 반환
}
}
class Solution {
public int findKthLargest(int[] nums, int k) {
Arrays.sort(nums);
for(int i = 0 ; i <nums.length ; i++){
if(i==nums.length-k){
return nums[i];
}
}
return -1;
}