[ 오늘의 코테 연습장 ][ LeetCode ] - Kth Largest Element in an Array

Mini_me·2023년 9월 11일
0

공부[코테연습장]

목록 보기
35/36
post-thumbnail

📑 문제
정수 배열과 정수 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;
    }

0개의 댓글

관련 채용 정보