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
  • 相关阅读:
    UVa 116 单向TSP(多段图最短路)
    POJ 1328 Radar Installation(贪心)
    POJ 1260 Pearls
    POJ 1836 Alignment
    POJ 3267 The Cow Lexicon
    UVa 1620 懒惰的苏珊(逆序数)
    POJ 1018 Communication System(DP)
    UVa 1347 旅行
    UVa 437 巴比伦塔
    UVa 1025 城市里的间谍
  • 原文地址:https://www.cnblogs.com/onenoteone/p/12441699.html
Copyright © 2011-2022 走看看