题目:
HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)
思路:
- 找一个数组中连续的最大和,可以设想从数组第一位开始第一位数据记录,第一位和第二位相加记录,第一位加第二位加第三位记录, 第一位加第二位加第三位加第四位记录 …直至第一位一直加到最后一位
- 再记录第二位数值 ,第二位加第三位数值 第二位加第三位加第四位 ,直至第二位加到最后一位…
- 在记录第三位数值,同样做法,一直相加,直到最后一位…一直重复操作,最后只剩最后一个元素记录
- 最后把记录的数据整体排序找出最大的那个数即为最大连续和
代码:
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections
public class Greatsumofsubarray {
public static void main(String[] args) {
int array[]=new int[] {};
int aim=FindGreatestSumOfSubArray(array);
System.out.println("连续最大和为"+ aim);
}
public static int FindGreatestSumOfSubArray(int[] array) {
ArrayList<Integer> temp=new ArrayList<Integer>();
if(array.length<=0) return 0;
for(int i=0;i<array.length;i++) {
int sum=0;
for(int j=i;j<array.length;j++) {
sum+=array[j];
temp.add(sum);
}
}
Collections.sort(temp);
return temp.get(temp.size()-1);
}
}
结语:
如有不足,请多指教。