Tencent 35-Kth le plus grand élément du réseau

Tencent 35, le plus grand élément du tableau

Trouvez le k-ème élément le plus grand dans le tableau non trié. Notez que ce que vous devez trouver est le k-ème élément le plus grand après le tri du tableau, pas le k-ème élément différent.

Exemple 1:

Entrée: [3,2,1,5,6,4] et k = 2
Sortie: 5

Vous devez pouvoir utiliser la fonction de partition rapide. L'
étape suivante consiste à écrire correctement la fonction de partition.
Python écrit 8 lignes de la fonction de partition. Parmi elles, les lignes 1, 2, 7, 8 sont faciles à retenir. La
première ligne, pivot prend la première valeur d'élément à gauche,
Dans la deuxième ligne, le déplacement j commence également à gauche (garantissez que nums [j] lui-même doit être inférieur ou égal à pivot, et l'initiale est égale à)
. La troisième ligne fait attention à la plage, i commence à gauche + 1, car le point de pivot n'a pas besoin d'être comparé à lui-même.
Notez à la ligne 4 que nums [i] et pivot sont comparés, le signe égal n'est pas impliqué, nums [i] est inférieur à pivot et il y a une opération, nums [i] se déplace vers l'avant et vers l'avant est lié à j. La
cinquième ligne est la plus importante parce que nums [j] Il doit être inférieur ou égal à pivot (la valeur initiale de nums [j] le prouve également), il n'est donc pas nécessaire d'échanger directement nums [j] et nums [i], et nums [j + 1] n'est pas nécessairement, nums [j +1] peut être supérieur ou égal à pivot, et il doit y avoir, si nums [j +1] <pivot, j + 1 = i, alors échanger nums [j +1] et nums [i] , Si nums [j +1]> pivot, il est plus raisonnable d'échanger nums [j +1] et nums [i]. En résumé, on peut comprendre pourquoi la cinquième étape a j = j + 1 La
sixième ligne complète l'échange de nums [j] et nums [i] (à ce moment j est déjà ajouté par 1) La
septième ligne déplace la gauche initiale et déplace La position d'échange de j (vérifie également que nums [j] ci-dessus doit être inférieur ou égal à pivot, et nums [j + 1] n'est pas nécessairement)
renvoie j, l'indice de pivot

class Solution:
    def partition(self,nums,left,right):
        pivot=nums[left]
        nums[left],nums[right]=nums[right],nums[left]
        store_index=left
        for i in range(left,right+1):
            if nums[i]<pivot:
                nums[store_index],nums[i]=nums[i],nums[store_index]
                store_index+=1
        nums[store_index],nums[right]=nums[right],nums[store_index]
        return store_index
    
    def findKthLargest(self, nums: List[int], k: int) -> int:
        ture_k=len(nums)-k
        left,right=0,len(nums)-1
        while(True):
            tmp=self.partition(nums,left,right)
            if tmp==ture_k:return nums[tmp]
            elif tmp<ture_k:left=tmp+1
            else:right=tmp-1
Publié 93 articles originaux · loué 8 · 10 000+ vues

Je suppose que tu aimes

Origine blog.csdn.net/zlb872551601/article/details/103649781
conseillé
Classement