查找第k大元素

牛客网

题目描述

给定一个无序的整型数组A[n],数组大小大于等于3,允许有值相同的元素;请设计算法找到该数组排序后第三大的元素值并输出.

输入

[6,5,4,4,1,2]

输出

4
def partition(arr):
    i,idx,j = 1,arr[0],0
    while j<len(arr):
        if arr[j]<idx:
            arr[i],arr[j] = arr[j],arr[i]
            i+=1
            j+=1
        else:
            j+=1
    arr[0],arr[i-1] = arr[i-1],arr[0]
    return arr,len(arr)-i+1

arr = list(map(int, input()[1:-1].split(',')))
target = 3
arr,idx = partition(arr)

while True:
    if idx==target:
        break
    elif idx>target:
        arr,idx = partition(arr[len(arr)-idx+1:])
    elif idx<target:
        target = target-idx
        arr,idx = partition(arr[:len(arr)-idx])
print(arr[-target])

思路:利用快排的partition操作去找更有效率。

posted @ 2019-07-10 11:23  三年一梦  阅读(397)  评论(0)    收藏  举报