查找第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操作去找更有效率。

浙公网安备 33010602011771号