Tencent 35-Kth elemento más grande en la matriz

Tencent 35-el elemento más grande de Kth en la matriz

Encuentra el k-ésimo elemento más grande en la matriz sin clasificar. Tenga en cuenta que lo que necesita encontrar es el k-ésimo elemento más grande después de que se ordena la matriz, no el k-ésimo elemento diferente.

Ejemplo 1:

Entrada: [3,2,1,5,6,4] yk = 2
Salida: 5

Debe poder utilizar la función de partición rápida. El
siguiente paso es escribir la función de partición correctamente.
Python escribe 8 líneas de la función de partición. Entre ellas, las líneas 1, 2, 7, 8 son fáciles de recordar. La
primera línea, pivote, toma el primer valor del elemento a la izquierda,
En la segunda línea, el movimiento j también comienza desde la izquierda (garantice que nums [j] en sí mismo debe ser menor o igual al pivote, y la inicial es igual a)
. La tercera línea presta atención al rango, i comienza desde la izquierda + 1, porque el punto de pivote no necesita ser comparado consigo mismo.
Tenga en cuenta que la línea 4, nums [i] y la comparación de pivote, un signo igual no participa, nums [i] es inferior a un pivote operativo, nums [i] se mueve hacia adelante, el delantero y j sobre
la quinta fila más importante, ya que los nums [j] Debe ser menor o igual a pivote (el valor inicial de nums [j] también lo prueba), por lo que no es necesario intercambiar directamente nums [j] y nums [i], y nums [j + 1] no es necesariamente, nums [j +1] puede ser mayor o igual que pivote, y debe haber, si nums [j +1] <pivot, j + 1 = i, entonces intercambie nums [j +1] y nums [i] , Si nums [j +1]> pivote, es más razonable intercambiar nums [j +1] y nums [i]. En resumen, se puede entender por qué el quinto paso tiene j = j + 1 La
sexta línea completa el intercambio de nums [j] y nums [i] (en este momento j ya está agregado por 1) La
séptima línea mueve la izquierda inicial y se mueve La posición de intercambio de j (también verifica que nums [j] arriba debe ser menor o igual que pivote, y nums [j + 1] no es necesariamente)
devuelve j, el índice de pivote

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
Publicado 93 artículos originales · elogiado 8 · 10,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/zlb872551601/article/details/103649781
Recomendado
Clasificación