알고리즘

Leetcode - Kth Largest Element in an Array(215)

rockettttman 2021. 3. 5. 13:36

JS heap priority queue

leetcode 215. Kth Largest Element in an Array

 

- javascript 로 heap 우선순위 큐 알고리즘 풀이

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
var findKthLargest = function(nums, k) {
    
    if(nums.length == 1) {
        return nums[0];
    }
    
    //k가 1일 때 nums Array에서 바로 max값 return
    if(k === 1) {
        var maxNum = 0;
        return nums.reduce((bef, cur) => {
            console.log(bef + ", " + cur)
            return max = Math.max(maxNum, bef, cur)
        });
    }
    
    var queue; 
    for(var i=0; i<k-1; i++) {
        queue = [];
        
        heapSort(queue, nums);
        var max = queue.splice(0, 1)[0];
        var maxIdx = nums.findIndex(num => num===max);
        nums.splice(maxIdx, 1);
    }
    return queue[0];
};

function heapSort(queue, nums) {
    for(var i=0; i<nums.length; i++) {
        var idx = i;
        
        if(i == 0) {
            queue.push(nums[i]);
            continue;
        }
        while(idx > 0 && queue[Math.floor(idx/2)] < nums[i]) {
            if(queue[Math.floor(idx/2)] > nums[i]) {
                break;
            }else {
                idx = Math.floor(idx/2);
            }
        }
        queue.splice(idx, 0, nums[i]);
    }
}