動態求前n個最小值 最大值

2022-10-09 16:18:08 字數 369 閱讀 7422

注: 由於最小值和最大值的分析過程完全相同,這裡我們只討論最小值的分析流程,最大值同理

每次給定乙個數值,詢問此數值以及之前給定數值中最小的n個數

例如給定數值的順序為:8 7 1 2 9 4,設n == 3

乙個最直觀的方法是,每次新增新的資料後,將當前所有資料進行排序,選擇較小的n個

一次排序最快也要\(o(nlogn)\),總的複雜度至少要\(o(n^2logn)\)

維護乙個容量為n的大根堆,堆內元素代表當前最小的n個值

每次新增數值與堆頂元素進行比較,具有以下兩種情況:

對於問題描述中所舉的例子,使用大根堆的求解流程如下:

動態求前n個最小值使用大根堆

動態求前n個最大值使用小根堆

C PTA 求最大值最小值

用指標作函式引數,程式設計序求一維陣列中的最大和最小的元素值。函式介面定義 void maxmin int arr,int pt1,int pt2,int n 其中 arr pt1 pt2 n都是使用者傳入的引數,n為元素個數。函式求指標arr所指向的一維陣列中的最大和最小的元素值,並將最大值和最小...

最大值 最小值

求最大最小的時候有點小技巧,就是我們兩個兩個的比較,把大個跟當前最大比較,小的跟當前最小的比較,這樣就會節約一點比較時間,有原來的2 n到3 n 2。include include 得到最大最小值 int getmaxmin int ndata,int nlen,int pnmax,int pnmi...

Problem E 求最大值和最小值

求出一些整數中的最大值和最小值。輸入為多行,以eof結束。每行為乙個十進位制的數字,全部由0 9組成,每行最長不超過1000個字元。有些數字會以0開頭 不影響數值大小的前導0 輸出為輸入中的最大值和最小值,格式見sample。02010001201223 the maximum value is 2...