美文网首页
5.第K大元素

5.第K大元素

作者: 八菜冰 | 来源:发表于2018-12-18 20:30 被阅读0次
  • 描述
    在数组中找到第k大的元素。
    给出数组 [9,3,2,4,8],第三大的元素是 4。
  • Solution
    使用快排Partition,得到基轴,如果k>基轴,就在基轴左边进行Partition迭代,如果k<基轴,就在基轴右边进行Partition迭代。

Partition

  1. 取一元素作为轴点pivot
  2. 从数组的左右端 left = 0 和 right = len(nums) - 1 开始扫描,如果nums[i] > pivot,则right -= 1,<同理,left += 1
  3. 将扫描到的数进行调换,在进行迭代,最终right=left
class Solution:
    # @param k & A a integer and an array
    # @return ans a integer
    def kthLargestElement(self, k, A):
        if not A or k < 1 or k > len(A):
            return None
        return self.partition(A, 0, len(A) - 1, len(A) - k)
        
    def partition(self, nums, start, end, k):
        """
        During the process, it's guaranteed start <= k <= end
        """
        if start == end:
            return nums[k]
            
        left, right = start, end
        pivot = nums[(start + end) // 2]
        while left <= right:
            while left <= right and nums[left] < pivot:
                left += 1
            while left <= right and nums[right] > pivot:
                right -= 1
            if left <= right:
                nums[left], nums[right] = nums[right], nums[left]
                left, right = left + 1, right - 1
             
        if k <= right:
            return self.partition(nums, start, right, k)
        if k >= left:
            return self.partition(nums, left, end, k)
        
        return nums[k]

相关文章

  • lintcode 5 寻找第k大数

    5. 在数组中找到第k大的元素 在数组中找到第k大的元素 参考 先排序,再查找。最简单,但是最麻烦,如果不止一次的...

  • 5.第K大元素

    描述在数组中找到第k大的元素。给出数组 [9,3,2,4,8],第三大的元素是 4。 Solution使用快排Pa...

  • 5. 第k大元素

    题目:在数组中找到第k大的元素(JAVA) 审题:输入:目标数n 输出:数组int[] nums 分析:...

  • 1.5 如何找出单链表中倒数第k个元素

    题目 找出单链表中倒数第k个元素,例如给定1>2>3>4>5>6>7,则单链表中的倒数第k=3个元素为5.

  • 快速排序

    在数组中找到第k大的元素

  • QuickSort的好哥们QuickSelect

    第k大元素 在数组中找到第k大的元素。 样例 给出数组 [9,3,2,4,8],第三大的元素是 4 给出数组 [1...

  • 5. 第k大元素(lintcode)

    利用快排的思想。 根据基准值(一般为数组的第一个数)。进行左右划分,比基准小的放到基准值右边,反之放左边(因为是第...

  • 算法分析 [最大/小值] 2019-02-28

    1. 数组,查找第k大值 215. 数组中的第K个最大元素(元素不重复无序) Kth Largest Elemen...

  • 数据流中的第K大元素

    数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。

  • 力扣 215 数组中的第K个最大元素

    题意:给定一个数组,找到第k个最大的元素 思路:利用快速排序,快速定位第k大的元素,具体可看代码注释 思想:快速排...

网友评论

      本文标题:5.第K大元素

      本文链接:https://www.haomeiwen.com/subject/xscrkqtx.html