Leetcode刷题记录——215. 数组中的第K个最大元素

在这里插入图片描述

这里给出两种思路
第一、基于Partition函数的方法
Partition函数可以对一个list进行调换顺序
使得这个list在调换后,呈现的状态为
LIST = LIST1 + [A] + LIST2
其中LIST1中所有元素都不大于A,LIST2中所有元素都不小于A
因此,我们只需先以LIST中任一个元素(如第一个元素)为A,
进行一次排序,看看A是LIST中排第几大的元素。
若A为第m大,m=k,返回A
若A为第m大,m>k,我们只需要对LIST2再执行partition函数即可
若A为第m大,m<k,我们只需要对LIST1再执行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


第二种,基于堆的方法,待补充

发布了43 篇原创文章 · 获赞 14 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41545780/article/details/105470194