OpenJudge 010 輸出前k大的數

2021-10-04 22:09:52 字數 1374 閱讀 3874

總時間限制: 10000ms 單個測試點時間限制: 1000ms 記憶體限制: 65536kb

描述

給定乙個陣列,統計前k大的數並且把這k個數從大到小輸出。

輸入

第一行包含乙個整數n,表示陣列的大小。n < 100000。

第二行包含n個整數,表示陣列的元素,整數之間以乙個空格分開。每個整數的絕對值不超過100000000。

第三行包含乙個整數k。k < n。

輸出

從大到小輸出前k大的數,每個數一行。

樣例輸入

10

4 5 6 9 8 7 1 2 3 0

5

樣例輸出

987

65

思想

本題由於只需要最大的k個數有序,而其餘n-k個數是不需要有序的,因此可以找到最大的k個數(無論有序有否)再對其進行排序即可。總體的思想就是對部分排序時間更少。

而查詢的話,就可以利用乙個快速排序中的分治思想,用基準數來將比其大的和比其小的數分在其兩旁,當且僅當該基準數(包含該基準數)到陣列末尾的元素個數為k時滿足要求;而元素個數比k小時(假設此時基準數以及其右邊的元素個數為m),就說明還需要在基準數左邊進行查詢較大的k-m個元素;而當元素個數大於k時,就只需要在基準數右邊縮小區間查詢即可。

**

#include

#include

using

namespace std;

void

findmaxk

(int

* ar,

int l,

int r,

const

int k)

if(r - i +

1< k)

findmaxk

(ar, l, i -

1, k -

(r - i +1)

);//在基準數左邊查詢剩餘個數的元素

else

if(r - i +

1== k)

//滿足條件

return

;else

findmaxk

(ar, i +

1, r, k)

;//在基準數右邊縮小查詢區間

}void

show

(int

* ar,

int k,

int n)

intmain()

010 輸出前k大的數

描述 給定乙個陣列,統計前k大的數並且把這k個數從大到小輸出。輸入第一行包含乙個整數n,表示陣列的大小。n 100000。第二行包含n個整數,表示陣列的元素,整數之間以乙個空格分開。每個整數的絕對值不超過100000000。第三行包含乙個整數k。k n。輸出從大到小輸出前k大的數,每個數一行。樣例輸...

OpenJudge1 1 06 空格分隔輸出

原題鏈結 總時間限制 1000ms 記憶體限制 65536kb 描述 讀入乙個字元,乙個整數,乙個單精度浮點數,乙個雙精度浮點數,然後按順序輸出它們,並且要求在他們之間用乙個空格分隔。輸出浮點數時保留6位小數。輸入 共有四行 第一行是乙個字元 第二行是乙個整數 第三行是乙個單精度浮點數 第四行是乙個...

(010)Python 變數的格式化輸出

字元 含義 s 字串。d 十進位制整數。06d表示輸出整數的顯示位數,即可以輸出整數,又可以控制輸出整數的長度,不到六位用 0 佔位補全,超過六位該多少還是多少。f 浮點數。2f表示小數點後顯示兩位,中間的數字用於控制小數點後的位數。輸出 格式化輸出練習 需求1 定義字串變數 name.輸出 我的名...