62,614
社区成员
发帖
与我相关
我的任务
分享
int MaxSum(int* a,int n)
{
int hasresult = 0;
int max=0;
int sum=0;
int i;
for(i=0; i<n; i++) {
sum += a[i];
if(!hasresult || sum>max) {
hasresult = 1;
max = sum;
}
if(sum<0)
sum = 0;
}
return max;
}
不就是一个for循环吗?
int sum = 0; // 其他还需要判断传的begin与end数值的合法性,比如正负数,是否超过数组大小等等。
for(int i=begin;i<=end;i++){
sum + = A[i];
}
public static void main(String[] args)
{
//初始化
List<Integer> list = Arrays.asList(new Integer[] {2, -1, 4, -3, 2});
System.out.println(list);
//辅助变量:当前起始下标,最大值的起始下标,最大值的结尾下标,当前求和,最大求和
int start, maxStart, maxEnd, sum, maxSum;
start = maxStart = maxEnd = sum = maxSum = 0;
//标记上一个值是否为负数
boolean isFirst = false;
for (int i = 0; i < list.size(); i++)
{
//当前求和
sum += list.get(i);
//若小于0,跳过本次循环
if (sum < 0)
{
//当前和清零
sum = 0;
//上一个值为负数
isFirst = true;
continue;
}
else
{
//上一个值为负数,则起始下标取当前值
if(isFirst)
{
start = i;
isFirst = false;
}
//若当前求和大于最大求和,记录最大和以及起始、结尾下标
if (sum > maxSum)
{
maxSum = sum;
maxStart = start;
maxEnd = i;
}
}
}
System.out.println("最大值之和:"+maxSum);
System.out.println("起始下标:"+maxStart);
System.out.println("终止下标:"+maxEnd);
}