【LeetCode-215】Kth Largest Element in an Array

方法一:冒泡方法,循环K次,找到第K大的值,鉴于这种方法比较low,就不介绍了

方法二:Java实现,用优先队列(堆)实现,这种确实比较简单,感觉应用了较复杂的数据结构不太爽

public class KthLargestElementinanArray {
	public int findKthLargest1(int[] nums, int k) {
        // 记住这种数据结构(优先队列,也是小顶堆)
        PriorityQueue<Integer> p = new PriorityQueue<Integer>();
        for(int i = 0 ; i < nums.length; i++){
            p.add(nums[i]);
            if(p.size()>k) 
                p.poll();
        }
        return p.poll();
    }
}

方法三:Python实现,用快速排序的思想,这种感觉比较好使,我比较喜欢

class Solution(object):
    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        if k > len(nums):
            return

        return self.quickSort(nums,0,len(nums) - 1,k)

    def quickSort(self,nums,left,right,k):
        if left <= right:

            begin = left
            end = right

            keyValue = nums[begin]

            while begin < end:
                # 从右边开始找到第一个比keyValue大的值
                while begin < end and nums[end] < keyValue:
                    end -= 1

                # 这里必须做判断,如果使用else则会出错
                if begin < end:
                    nums[begin] = nums[end]
                    begin += 1

                # 从左边开始找到第一个小于等于keyValue的值
                while begin < end and nums[begin] > keyValue:
                    begin += 1

                if begin < end:
                    nums[end] = nums[begin]
                    end -= 1

            nums[begin] = keyValue

            if begin + 1 > k:
                return self.quickSort(nums,left,begin - 1,k)

            elif begin + 1 < k:
                # 找到下标是k - 1就行
                return self.quickSort(nums,begin + 1,right,k)
            else:
                return nums[begin]


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值