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很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,...