📅  最后修改于: 2023-12-03 15:10:19.618000             🧑  作者: Mango
在一个无序数组中找出第K大的数。
对数组进行快速排序,时间复杂度为O(nlogn),然后找出第K大的数即可。代码如下:
def quick_sort(arr):
if len(arr) < 2:
return arr
else:
pivot = arr[0]
less = [i for i in arr[1:] if i <= pivot]
greater = [i for i in arr[1:] if i > pivot]
return quick_sort(greater) + [pivot] + quick_sort(less)
def find_kth_largest(arr, k):
sorted_arr = quick_sort(arr)
return sorted_arr[-k]
建立一个小根堆,依次将数组中的元素加入小根堆中,当小根堆中的元素个数大于k时,就将堆顶元素弹出,最后堆顶元素即为第K大的数。时间复杂度为O(nlogk)。
代码如下:
import heapq
def find_kth_largest(arr, k):
heap = []
for i in arr:
heapq.heappush(heap, i)
if len(heap) > k:
heapq.heappop(heap)
return heap[0]
堆排序比快速排序更具效率,尤其是在数组大小接近k时。可以根据具体情况选择不同的解法。