Demostrar la oferta de seguridad: la adquisición de un número mínimo de k

 

1 idea:

Con una lista almacenada de longitud k k-ésimo número más pequeño, a través de la matriz, cada uno a un número, este número será y comparando el número máximo en la lista, si es menor que el número máximo, entonces el número máximo de cambio fuera.

Esta idea es correcta, pero luego puede optimizado. Hacer la lista, pero con un gran montón de raíz.

Ampliación de definición montón de raíz:

        Un árbol binario completo; root> izquierda, derecha  

An métodos de almacenamiento array gran montón raíz:

         para el nodo raíz del índice i es el índice (i-1) // 2; índice de sus nodos secundarios es de aproximadamente 2 * i + 1, 2 * i + 2

La construcción de una gran pila propia raíz / root pequeño montón:

# -*- coding:utf-8 -*-
import heapq
class Solution:
    def GetLeastNumbers_Solution(self, tinput, k):
        if k>len(tinput) or k==0:
            return []
        
        # 用前 k 个数构建大根堆
        maxh = []
        for num in tinput[:k]:
            heapq.heappush(maxh,-num)
        
        # 依次把数插入大根堆
        for num in tinput[k:]:
            if num < -maxh[0]:
                heapq.heapreplace(maxh,-num)
        for i in range(len(maxh)):
            maxh[i] = -maxh[i]
        maxh.sort()
        return maxh
    
    def swap(h,i,j):
        temp = h[i]
        h[i] = h[j]
        h[j] = temp
    j
    def buildMaxStack(stack,start,n): #根据stack构建大根堆,从i到j排序
        # n = len(stack)-1
        i = n//2-1
        while i >=0:
            if stack[i] > max([stack[2*i+1],stack[2*i+2]]):
                pass
            else:
                if max([stack[2*i+1],stack[2*i+2]]) == stack[2*i+1]:
                    self.swap[stack,2*i+1,i]
                    if 2*(2*i+1)+1 > n :
                        pass
                    
                
            i-=1
        
        
        
        

 

 

 

Publicado 82 artículos originales · ganado elogios 2 · Vistas 4349

Supongo que te gusta

Origin blog.csdn.net/qq_22498427/article/details/104833631
Recomendado
Clasificación