数据结构与算法分析
C语言描述 21页
int maxsub(const int a[],int n)
{
int thissum=0,maxsum=0,j=0;
for(j=0;j<n;++j){
thissum += a[j];
if(thissum>maxsum)
maxsum=thissum;
else if(thissum <0 )
thissum =0;
}
return maxsum;
}
C语言描述 21页
int maxsub(const int a[],int n)
{
int thissum=0,maxsum=0,j=0;
for(j=0;j<n;++j){
thissum += a[j];
if(thissum>maxsum)
maxsum=thissum;
else if(thissum <0 )
thissum =0;
}
return maxsum;
}
解决方案 »
- 怎样才能让不同的控件响应事件对应同一函数?
- 怎样读取jpg文件中的Summary(作者、关键字、标题等)信息
- 有关宏定义的问题,请各位进来看看,问题一解决立即放分!
- 如果str*指向???????(未分配的空间)的话,该如何识别呢?
- Windows 2000下如何屏蔽Ctrl+Alt+Del?????
- pb7 中如何将函数声明部分写入decare的Global Extenrl functions中
- 关于桌面路径的问题,谢谢
- 如何将一个DLL封装成COM?
- 简单问题,跟贴有分!
- 如何用VC编程检测系统中没有响应的任务(应用程序)
- 哪位做过本地的全文搜索引擎啊,请提供个思路或源代码
- MFC ActiveX 继承问题 能回答该问题的高手可以得到200分
{ int nIndexLeft;
int nIndexRight; int nMaxValue = 0;
int nSaveLeft = 0;
int nSaveRight = 0; nIndexLeft = 0; while (nIndexLeft < nSize-1)
{
if (pArray[nIndexLeft] <= 0)
{
nIndexLeft = nIndexLeft+1;
continue;
} nIndexRight = nIndexLeft +1; int nTempValue = pArray[nIndexLeft]; while (nIndexRight < nSize)
{
nTempValue += pArray[nIndexRight];
if (nTempValue > nMaxValue)
{
nMaxValue = nTempValue;
nSaveLeft = nIndexLeft;
nSaveRight = nIndexRight;
} nIndexRight += 1;
} nIndexLeft += 1; } cout<<"the max value is "<<nMaxValue<<endl;
cout<<"left from "<<nSaveLeft<<endl;
cout<<"right end "<<nSaveRight<<endl; return nMaxValue;
}
#include <iostream>
#include <cmath>
#include <ctime>using namespace std;int main() {
const int length = 20;
int data[length];
int max = 0;
srand(time(0));
for (int i = 0; i < length; i++) {
data[i] = rand() % 20 - 5;
cout << data[i] << "\t";
}
cout << endl;
max = data[0];
for (int i = 0; i < length; i++) {
int temp_max = data[i];
for (int j = i+1; j < length; j++) {
if ((temp_max + data[j]) >= temp_max) {
temp_max += data[j];
} else {
break;
}
}
if (temp_max > max) {
max = temp_max;
}
}
cout << "The max continuous max value is " << max << endl;
}
| a[0] | a[1] | ... | a[i] | ... | a[j] | ... | a[N-1] |
+------+------+-----+------+-----+------+-----+--------+
|____________|
|
SUM(j-i+1)当a一定,N一定,M一定时(M<=N)求这个SUM(M)的最大值那么就从a[0]+...+a[M-1]算到a[N-M]+...+a[N-1]取最大值不就是嘛?
| a[0] | a[1] | ... | a[i] | ... | a[j] | ... | a[N-1] |
+------+------+-----+------+-----+------+-----+--------+
|____________|
|
SUM(j-i+1)
for(int i;i<n;i++)
{
Sum=a[i];
temp1=i;//记录位置
Max=Sum;
for(int j=i+1;j<n;i++)
{
Sum+=a[j];
if(Sum>Max)
{
Max=Sum;
temp2=j;//记录位置
}
}
}
楼下们说说看吧,我也不太清楚!
int sum = 0;
for(int j = 0; j < n;j ++){
sum = 0;
for(int k = n - 1; k >= j; k--){
sum += a[k];
}
if(sum > max_sum){
max_sum = sum;
}
}
}
-----------------------
怎么解释下面的数列:
1,2,3,-1,6,7,8,-1,9
a[4]到a[6]为要求的连续段,a[0]~a[4]、a[6]~a[8]的和???int sum = 0,sumo = 0;
int j=0,jc=0,k=0;
for(int i=0;i<n;i++)
{
if(a[i] < 0)
{
if(sumo > sum)
{
sum = sumo;
j = jc;
k = i - 1;
}
i++;
while(a[i] < 0)
i++;
sumo = 0;
jc = i;
}
sumo += a[i];
}
if(sumo > sum)
{
sum = sumo;
j = jc;
k = n - 1;
}
j,k,sum就是最终值
结果应该是0~8楼主说的没错,“假设a[i]到a[k]即为要求的连续段,那么从a[0]~a[i]、a[k]~a[n-1]的和肯定不为正。”如果为正的话,那结果就应该是整个数组。
dbMax = 0;
for(int i = 0; i < n && i < k; k ++)
dbMax += A[i];
for(i = k; i < n; i ++)
dbMax = dbMax + A[i] > dbMax ? dbMax + A[i] : dbMax;
//#include "stdafx.h"const int N = 10;
const int LEN = 5;int main(int argc, char* argv[])
{
int arr[N]={0};
int sum = 0;
int sumtmp = 0;
int ban = 0; //差'额 int i =0; for (i=0; i<N; i++)
{
arr[i] = i*6-i*i;
} for (i=0; i<LEN; i++)
{
sum += arr[i];
} for (i=LEN; i<N; i++)
{
ban = arr[i] - arr[i-LEN];
if(ban >0)
{
sumtmp = sum;
sum += ban;
}
} for (i=0; i<N; i++)
{
printf("%d\t",arr[i]);
}
printf("\n\nsum=\t%d\n",sum); return 0;
}就这样而已吧