求亂序排序的N個數中連續K個數的和的最大值。

2022-03-24 08:08:36 字數 1093 閱讀 9004

1、有乙個整形陣列,其元素包含正整數和負整數,找到它的所有子集中元素之和最大的那個子集。

如:[12,-3,54,-42,4,5,7],結果為63[12,-3,54]。

要求複雜度為o(n)。

intfunc(

intn, 

inta)

return

sum;

} 2、求亂序排序的n個數中連續k個數的和的最大值。

具體思路:

假設有n:a1 a2 a3 a4 a5 ... an

需要求出所有連續k的和,那麼,先求出a1~ak的和sum

a(2)~a(k+1)的和=sum - a1 + a(k+1)---------------------(1)

a(3)~a(k+2)的和=(1)式結果-a(2) + a(k+2)

code

#include 

<

iostream

>

using

namespace

std;

intmain()

num 

=new

int[n];

cout 

<<

"請輸入n個整數: ";

sum =0

;for

(inti =

0; i 

<

n; i++)

max 

=sum;

for(

inti 

=k; i 

<

n; i++)

}cout 

<<

max 

<<

endl;

delete num;

system(

"pause");

return0;

}

求n 中因子k的個數

思路 求n的階乘某個因子k的個數,如果n比較小,可以直接算出來,但是如果n很大,此時n 超出了資料的表示範圍,這種直接求的方法肯定行不通。其實n 可以表示成統一的方式。n km m a 其中k是該因子,m n k,a是不含因子k的數的乘積 下面推導這個公式 n n n 1 n 2 3 2 1 k 2...

N個數,求第K大數

有n個不重複的數,這n個數可以放入記憶體中,讓你用最快的方法找到第k大的數。解答 一般情況我們可能考慮,先將n個數排序 快排序 堆排序 然後可以得到結果。但是當n很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,這個數左邊都比它大,右邊都比他小...

N個數,求第K大數

今天同學給我出了一道題是這樣的 有n個不重複的數,這n個數可以放入記憶體中,讓你用最快的方法找到第k大的數。解答 一般情況我們可能考慮,先將n個數排序 快排序 堆排序 然後可以得到結果。但是當n很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,...