求陣列中連續k個數最大值

2021-10-05 14:18:28 字數 1655 閱讀 6679

變式題求數列中第k大的數

前k大問題:給定乙個長度為n陣列,求每個連續k個數的最大值,複雜度要求o(n×log(k))。

解釋:例如陣列為[1,3,2,4,5],k= 2,則連續k個數的區間有[1,3],[3,2],[2,4],[4,5],每個區間的最大值分別為3,3,4,5,所以輸出3,3,4,5

#include

using

namespace std;

constintmaxn=

1e5+5;

int n,k,a[maxn]

;multiset<

int> ms;

intmain()

for(

int i =

0; i < n; i++

)for

(int i =

0; i < k; i++

) cout <<*(

--ms.

end())

<<'';

for(

int i = k; i < n; i++

) cout

}

給定a、b兩個數列,各包含n個數,分別從a和b中任意取乙個數相加得到和,這樣會有n2種結果(包括重複的),求n2個結果中前n個最小的和。

樣例:

input:

51 3 4 2 0

7 3 5 2 11

output:

2 3 3 4 4

思路:維護乙個大小為n的優先佇列

#include

#include

#include

#include

#include

using

namespace std;

vector<

long

long

> a, b;

int n;

long

long temp;

intmain()

for(

int i =

0; i < n; i++

)sort

(a.begin()

, a.

end())

;sort

(b.begin()

, b.

end())

; a.

erase

(a.begin()

+ n /2+

1, a.

end())

; b.

erase

(b.begin()

+ n /2+

1, b.

end())

;for

(int i =

0; i < a.

size()

; i++

)else

} res.

push

(a[i]

+ b[j]);

}}while

(res.

size()

)while

(rres.

size()

)return0;

}

維護乙個大小為k的優先佇列。

求陣列中連續子陣列的最大值

求解陣列中連續一段子陣列和的最大值。例如 最大值為59 26 53 58 97 187 思路 計算出任意i到j之間連續子陣列的和再比較必然能得到最大值,但時間複雜度為o n 2 我們希望能找出線性時間的演算法。我們注意到,假如陣列中全為正數,那麼最大和必然為全部數相加 如果陣列中有負數,並且如果加上...

遞迴求陣列最大值

遞迴求陣列最大值 使用遞迴當方式求陣列中最大的值 public class diguigetmax int mid l r 2 int leftmax getmax a,0,mid int rightmax getmax a,mid 1,r return math.max leftmax,right...

求陣列中最大值

所有c語言 都是在loadrunner中執行 action 定義乙個int陣列 int len 記錄陣列元素個數 int max 所求的最大值 int i 迴圈變數 loadrunnerg中,不能在for迴圈中定義變數 len sizeof a sizeof int 陣列元素個數 陣列所佔字元數 陣...