Voici deux idées.
Premièrement, la méthode basée sur la fonction de partition. La
fonction de partition peut modifier l'ordre d'une liste, de
sorte qu'après le remplacement de la liste, l'état de la liste est
LIST = LIST1 + [A] +
LIST2. Tous les éléments de LIST1 ne sont pas S'il est supérieur à A, tous les éléments de LIST2 ne sont pas inférieurs à A.
Par conséquent, nous devons d'
abord trier tout élément de LIST (tel que le premier élément) comme A pour voir si A est le plus grand élément de LIST.
Si A est le mième plus grand, m = k, retourne A
Si A est le mième plus grand, m> k, il suffit d'exécuter la fonction de partition sur LIST2.
Si A est le mième plus grand, m <k, nous n'avons que LIST1 puis exécutez la fonction de partition
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
dijida,temp,dy,xy,index = self.partition(nums)#,index
if dijida == k:
return temp
lastlen = 0
while dijida != k:
if dijida > k:
dijida,temp,dy,xy,index = self.partition(dy)
if index == 1:
return temp
elif dijida < k:
lastlen += len(dy)+1
dijida,temp,dy,xy,index = self.partition(xy)
dijida += lastlen
if index == 1:
return temp
return temp
def partition(self,inputlist):
if len(inputlist) == 1:
return 1,inputlist[0],[],[],1
temp = inputlist[0]
xiaoyulist = []
dayulist = []
length = len(inputlist)
for i in range(length-1):
if inputlist[i+1] > temp:
dayulist.append(inputlist[i+1])
else:
xiaoyulist.append(inputlist[i+1])
return len(dayulist) + 1,temp,dayulist,xiaoyulist,0
La deuxième méthode, basée sur le tas, à ajouter