求乙個陣列的和最大的連續子陣列及擴充套件

2021-06-21 16:28:15 字數 2114 閱讀 4777

在c++中a=1與a(1)有什麼區別?a=1是賦值,a(1)是乙個函式值

求1億內的素數,並輸出。

#include

#include

const long n = 10000001;

bool prime[10000001];

int main()

prime[2]=true;

for(i=3; i<=sqrt(n); i+=2)

for(i=2; iif( prime[i] )

printf("%d ",i);

return 0;

}

class a;

cout<

class a;

cout<

class a;

cout<

class a;

class b: virtual a ;

class b: virtual a ;

cout<8

class a;

class b: virtual a ;

cout<8

程式設計之美:

給定一整數陣列,求連續的子陣列和的最大值:

設定兩個整數變數:cur 和sum,從給定陣列中依次取出所有元素,加到cur 上去,當cur<0 時候重置cur。sum 記錄cur 出現過的最大值:

var cur = array[0];
var sum = cur;
for (int i = 1; i < array.length; i++)
return sum;

如果要求得到最大和的連續子陣列的起始位置,那麼通過以上思路就更加容易寫出**:

int start1 = 0, start2 = 0, end = 0;
var cur = array[0];
var sum = cur;
for (int i = 1; i < array.length; i++)
else cur += array[ i ];
if (sum < cur)
}
//返回 [start1, end]

本例中,我們用start1,start2 來記錄起始位置,end 來記錄終止位置。start2 相當於「工作變數」,start1 儲存歷史最大和連續子陣列的起始位置。

如果給定的是陣列是首尾相連的迴圈陣列,如何求解?首先設計乙個函式,求解給定陣列中,從from 開始的,最多到to 結束的最大和連續子陣列的末尾位置,思路和前面解法類似。

int maxsum_position(int array, int from, int to)
}
return

end;

}

有了這個函式以後,可以將迴圈陣列中的問題分成兩種情況:一種是連續子陣列跨越了0 位置的,一種是沒有跨越的:

int sum1 = maxsum(array);//不跨越0 位置的最大和
int i = maxsum_position(array, 0, array.length - 1);
int j = maxsum_position(array, array.length - 1, 0);
int sum2 = 0;
if (i > j) j = i + 1;
for (int k = 0; k < array.length; k++)
return math.max(sum1, sum2);

求乙個陣列的連續子陣列的最大和

輸入乙個整型陣列,陣列中有正有負。陣列中的乙個或多個整數組成乙個子陣列。求所有子陣列的和的最大值,要求時間複雜度為o n 首先,根據題意,可能我們都會想到列舉陣列中所有的子陣列的和。我們都知道乙個長度為n的陣列,總共有n n 1 2個子陣列。計算出所有子陣列的和需要o n 2 時間。我們先來舉例分析...

乙個陣列有 N 個元素,求連續子陣列的最大和

輸入描述 輸入為兩行。第一行乙個整數n 1 n 100000 表示一共有n個元素 第二行為n個數,即每個元素,每個 整數都在32位int範圍內。以空格分隔。輸出描述 所有連續子陣列中和最大的值。示例1 輸入3 1 2 1輸出3 我們用pos代表即將要加的數,sum從0開始一直 pos,並每次進行判斷...

面試題 求乙個陣列的連續子陣列的最大和

思路 設定乙個最大和 max 對於每乙個元素都求出其最大的子陣列的連續和 tmpmax 然後再與這個最大和進行比較 實現 include include int main 暴力求解法 int max 100000 for size t i 0 i num i std cout max endl re...