找出最小或者最大的幾個數我使用的是堆排序,效率為0(nlgn)
構建小頂堆返回末尾的k個數 或者 構建大頂堆返回前k個數
1#!/usr/bin/env python323
defheap_sort(ary, num):
4def
siftdown(ary, e, begin, end):
5 i,j = begin, begin*2+1
6while j 7if j+1 < end and ary[j+1] 8 j += 1
9if e 10break
11 ary[i] =ary[j]
12 i,j = j,j*2+1
13 ary[i] =e
1415 end =len(ary)
16for i in range(end//2-1, -1, -1):
17siftdown(ary, ary[i], i, end)
1819
#方法1
20for i in range(end-1, -1, -1):
21 e =ary[i]
22 ary[i] =ary[0]
23siftdown(ary, e, 0, i)
24return ary[:-num-1:-1]
2526
#方法2
27"""
28li =
29for i in range(num):
30if len(ary) > i:
3132
e = ary[end-1-i]
33siftdown(ary, e, 0, end-1-i)
34else:
35break
36return li
37"""
3839
if__name__ == '
__main__':
40 a = [4,5,1,6,2,7,3,8]
41 num = int(input("
最小的k個數:"))
42print(heap_sort(a,num))
找出最小的k個數
已知陣列中的n個正數,找出其中最小的k個數。例如 4 5 1 6 2 7 3 8 k 4,則最小的4個數是1,2,3,4 要求 高效 分析時空效率 擴充套件 能否設計出適合在海量資料中實現上述運算?方法一 1 利用最大根堆實現最小k個節點2 最大根堆特點 每個節點都比他左右孩子要大3 調整最大堆的時...
找出陣列中最小的k個數
leetcode 面試題40.最小的k個數 快速排序,時間複雜度為nlogn,然後前k個元素就是最小的k個數 class solution 原理也是快速排序的原理,只不過增加了停止條件。不用完全排序而已。class solution int label quicksort arr,0,arr.len...
九度 題目1371 最小的K個數
時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 4133 解決 856 題目描述 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,輸入 每個測試案例包括2行 第一行為2個整數n,k 1 n,k 200000 表示陣列...