题目:从一个数组中找到和最大的子数组,数组中可能有负数。
想法:穷举法实现次问题,列出所有情况,进行比较记录!
- 编写一个计算数组中某个范围内的和的方法。
- 依次遍历所有的情况,记录最大值。
C++实现如下:
//============================================================================
// Name : MaxSubArray.cpp
// Author : jue
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
using namespace std;
class MyData
{
public:
int startIndex;
int endIndex;
int maxData;
};
int getSum(int datas[],int start,int end)
{
int sum = 0;
for(int i = start;i <= end;i++)
{
sum += datas[i];
}
return sum;
}
MyData* findMaxSubArray(int datas[],int length)
{
MyData *data = new MyData;
for( int i = 0; i < length;i ++){
for( int j = i; j < length; j ++)
{
int sum = getSum(datas,i,j);
if((i == 0 && j==0) || (sum > data->maxData))
{
data->maxData = sum;
data->startIndex = i;
data->endIndex = j;
}
}
}
return data;
}
int main()
{
int datas[] = {1,-2,-3};
MyData* data = findMaxSubArray(datas,3);
cout<<"max = "<<data->maxData<<" start : "<<data->startIndex<<" end : "<<data->endIndex;
return 0;
}