题目描述:
给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大。输出答案时,请分别返回第一个数字和最后一个数字的下标。(如果存在多个答案,请返回字典序最小的)。
比如给定 [-3, 1, 3, -3, 4], 返回[1,4]。 请写出一个函数实现该功能,第一个参数为输入的整数数组,第二个参数为输出的下标数组。算法实现请考虑时间复杂度。
方法:动态规划
代码实现:
public class Solution {
public List<Integer> continuousSubarraySum(int[] a) {
List<Integer> list = new ArrayList<>();
if(a == null || a.length == 0)
return list;
list.add(0);
list.add(0);
int start = 0, end = 0;
int sum = 0;
int ans = Integer.MIN_VALUE;
for(int i = 0; i < a.length; i++){
if(sum < 0){
sum = a[i];
start = end = i;
}else{
sum += a[i];
end = i;
}
if(sum > ans){
list.set(0,start);
list.set(1,end);
ans = sum;
}
}
return list;
}
}