【发布时间】:2016-11-16 22:35:32
【问题描述】:
我有一个数组 [1,2,3],总和为 4。所以所有连续子数组都是 [1],[1,2][2,3] 和 [1,2,3]。所以小于等于sum的最大长度子数组为[1,2],长度为2。
我已通过以下方式找到所有子数组并检查子数组的总和,如下所示。但是这种方法不适用于负数。 {1,2,1,1,3,-2,-3,7,9}; - 答:7
private static void maximumSubArray(int[] a, int sum) {
int start = 0;
int end =0;
int mylen =-1;
int subarrSum =0;
for(int i=0;i<a.length;i++){
subarrSum += a[i];
end++;
while(subarrSum > sum){
subarrSum-= a[start];
start +=1;
}
mylen = Math.max(mylen, end-start);
}
System.out.println(mylen + " -- My len");
}
【问题讨论】:
-
“有没有更好的方法??”是的。您可以按线性时间搜索。
-
"所以所有连续子数组都是"你忘了
[2]和[3]。
标签: java data-structures