注: 由於最小值和最大值的分析過程完全相同,這裡我們只討論最小值的分析流程,最大值同理
每次給定乙個數值,詢問此數值以及之前給定數值中最小的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...