給定乙個陣列,統計前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...