LeetCode 215 El Kth elemento más grande en la matriz

  • Ideas

      Cree un montón mínimo de longitud k en la matriz original y recorra la matriz secuencialmente desde la posición k hasta la matriz original. Cuando nums [i]> nums [0], ejecute swap (nums [i], nums [0]), y luego ajustar hacia abajo Después de atravesar la matriz, nums [0] es el K-ésimo elemento más grande en la matriz.

Complejidad de tiempo: O (n * logk)

Complejidad espacial: O (1)

  • Código
class Solution {
public:

    //建立最小堆
    void buildMinHeap(vector<int>& nums, int k){
        int temp;
        for(int i = (k - 1)/2; i >= 0; --i){
            adjustDown(nums, i, k);
        }
    }

    //向下调整
    void adjustDown(vector<int>& nums, int indexofdown,int k){
        int index = indexofdown;
        int temp;
        while(index <= k - 1){
            temp = index * 2 + 1;
            if(temp + 1 <= k - 1 && nums[temp + 1] < nums[temp]){
                temp = temp + 1;
            }

            if(temp <= k - 1 && nums[index] > nums[temp]){
                swap(nums[index], nums[temp]);
                index = temp;
            }else{
                break;
            }
        }
    }

    int findKthLargest(vector<int>& nums, int k) {
        buildMinHeap(nums, k);
        
        int size = nums.size();        
        for(int i = k; i < size; ++i){
            if(nums[i] >= nums[0]){
                swap(nums[i], nums[0]);
                adjustDown(nums, 0, k);
            }
        }
        return nums[0];
    }
};

 

Supongo que te gusta

Origin blog.csdn.net/xiaoan08133192/article/details/109037021
Recomendado
Clasificación