[Pergunta diária] 24: O quinto maior elemento da matriz

Descrição do título

Encontre o k-ésimo elemento maior na matriz não classificada. Observe que o que você precisa encontrar é o k-ésimo elemento maior depois que a matriz é classificada, não o k-ésimo elemento diferente.

Exemplo 1:

输入: [3,2,1,5,6,4] 和 k = 2
输出: 5

Explicação:

Você pode assumir que k é sempre válido e 1 ≤ k ≤ o comprimento da matriz.

Lei de violência

Código de demonstração:

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        if(nums.size() < k || nums.size() == 0){
            return 0;
        }
        sort(nums.begin(), nums.end());
        return nums[nums.size() - k];
    }
};

Use uma pequena pilha superior

Código de demonstração:

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        if(nums.size() < k || nums.size() == 0){
            return 0;
        }

        priority_queue<int, vector<int>, greater<int>> pq;

        for(int i = 0; i < nums.size(); i++)
        {
            pq.push(nums[i]);
            if (int(pq.size()) > k)
            {
                pq.pop();
            }
        }
        
        return pq.top();
    }
};

Use uma pilha grande

Código de demonstração:

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        if(nums.size() < k || nums.size() == 0){
            return 0;
        }
        
        int i;
        priority_queue<int> p(nums.begin(), nums.end());
        // 将优先级队列中前k-1个元素删除掉 
        //priority_queue<int, vector<int>, less<int>> pq;

        //for(i = 0; i < nums.size(); i++){
        //    pq.push(nums[i]);
        //}
        for(i = 1; i < k; i++){
            pq.pop();
        }
        return pq.top();
    }
};

Se você tem opiniões diferentes, por favor deixe uma mensagem para discutir! ! !

Publicado 152 artigos originais · elogiou 45 · 10.000+ visualizações

Acho que você gosta

Origin blog.csdn.net/AngelDg/article/details/105369770
Recomendado
Clasificación