程式設計題目 找出最小的k個數

2022-07-27 18:48:12 字數 1244 閱讀 8540

找出最小或者最大的幾個數我使用的是堆排序,效率為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 表示陣列...