zoukankan      html  css  js  c++  java
  • 数组—找出数组的第k大的数

    '''
    找出数组的第k大的数:[6,7,8,9, 3, 2, 4, 8]第3大的数是4
    '''
    
    
    class Solution:
        def call(self, nums, k):
            if nums == None or len(nums) == 0:
                return -1
            result = self.qsort(nums, 0, len(nums) - 1, k)
            return result
    
        def qsort(self, nums, L, u, k):
            '''
            快排的一次快排操作函数
            :param nums: 
            :param L: 左边
            :param u: 右边
            :param k: 第k大
            :return: 
            '''
            if L >= u:
                return nums[u]
    
            m = L
            for i in range(L + 1, u + 1):  # u + 1保证遍历到u位置的值
                # 以nums[L]为基准,只要m右边的比它大就转到m左边
                if nums[i] > nums[L]:
                    m += 1
                    nums[m], nums[i] = nums[i], nums[m]
            # 此时,m左边的比nums[m]大,右边的比nums[m]小
            nums[m], nums[L] = nums[L], nums[m]
            # m左边有k-1个数时,第k大的数就是nums[m]
            if m + 1 == k:
                return nums[m]
            elif m + 1 > k:  # 左边大于k-1个数时,第k大在左边
                return self.qsort(nums, L, m - 1, k)
            else:  # 小于k时,第k大在右边
                return self.qsort(nums, m + 1, u, k)
    
    
    s = Solution()
    print(s.call([6, 7, 9, 3, 2, 4, 8], 4))
    #第4大的是数字6
    #6
  • 相关阅读:
    我用自己做的图书比价搜索买了一本书
    2.17
    最近的工作
    FireBug的Bug
    2.18
    tecent面试题解答
    .net杂记
    python的round测试
    最近在网上买书的体会
    关于迅雷评论的一个改造html css
  • 原文地址:https://www.cnblogs.com/onenoteone/p/12441699.html
Copyright © 2011-2022 走看看