给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大。输出答案时,请分别返回第一个数字和最后一个数字的下标。(如果两个相同的答案,请返回其中任意一个)
样例
样例
给定 [-3, 1, 3, -3, 4], 返回[1,4].
package com.nuaa.sg;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大。输出答案时,请分别返回第一个数字和最后一个数字的下标。(如果两个相同的答案,请返回其中任意一个)
样例
给定 [-3, 1, 3, -3, 4], 返回[1,4].
*
* @author Dell
*
*/
public class Test402 {
public static ArrayList<Integer> continuousSubarraySum(int[] A)
{
if(A==null||A.length==0)
return null;
ArrayList<Integer> list=new ArrayList<Integer>();
int sum=0;
int start=0;
int end=0;
int max=Integer.MIN_VALUE;
int t=0;
for(int i=0;i<A.length;i++)
{
sum=sum+A[i];
if(sum>=max)
{
max=sum;
start=t;
end=i;
}
if(sum<0)
{
sum=0;
t=i+1;
}
}
list.add(start);
list.add(end);
return list;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] a=new int[n];
for(int i=0;i<a.length;i++)
{
a[i]=sc.nextInt();
}
ArrayList<Integer> list=continuousSubarraySum(a);
System.out.println(list);
}
}