分治專題 輸出前k大的數

2021-09-08 02:43:07 字數 1084 閱讀 5284

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

分治:把乙個問題分解成形式和原任務相同,但規模更小的幾個部分任務(通常是兩個部分),分別完成,或只需要選一部分完成。然後再處理完成後的這乙個或幾個部分的結果,實現整個任務的完成。

把前m大的都弄到陣列的右邊,然後對最右邊的m個元素排序再輸出。

o(n)時間內實現把前m大的都弄到陣列最右邊。

arrangeringht(int l, int r, int k):把陣列[l, r]前k大的都弄到最右邊。(類似快排)

//分治

if(r-i+

1==k)

return;if

(r-i+

1>k)

arrangeringht

(i+1

, r, k)

;//後半部分

if(r-i+

1arrangeringht

(l, i-

1, k-

(r-i+1)

);//前半部分

}int

main()

scanf

("%d"

,&k)

;arrangeringht(1

, n, k)

;sort

(a+n-k, a+n+1)

;for

(int i=n;i>=n-k+

1;i--

)return0;

}

分治 001 輸出前k大的數

總時間限制 10000ms 單個測試點時間限制 1000ms 記憶體限制 65536kb 描述 給定乙個陣列,統計前k大的數並且把這k個數從大到小輸出。輸入 第一行包含乙個整數n,表示陣列的大小。n 100000。第二行包含n個整數,表示陣列的元素,整數之間以乙個空格分開。每個整數的絕對值不超過10...

輸出前k大的數

010 輸出前k大的數 總time limit 10000ms 單個測試點時間限制 1000ms memory limit 65536kb description 給定乙個陣列,統計前k大的數並且把這k個數從大到小輸出。input 第一行包含乙個整數n,表示陣列的大小。n 100000。第二行包含n...

輸出前 k 大的數

總時間限制 10000ms 單個測試點時間限制 1000ms 記憶體限制 65536kb 描述 給定乙個陣列,統計前k大的數並且把這k個數從大到小輸出。輸入第一行包含乙個整數n,表示陣列的大小。n 100000。第二行包含n個整數,表示陣列的元素,整數之間以乙個空格分開。每個整數的絕對值不超過100...