子数组的最大累加和问题
来源:互联网 发布:cdn网络节点 编辑:程序博客网 时间:2024/06/05 14:12
【题目】
给定一个数组arr,返回子数组中的最大累加和。
例如,arr[1,-2,3,5,-2,6,-1],其中子数组[3,5,-2,6]累加和最大为12,故返回12.
【要求】
时间复杂度为O(N),额外空间复杂度为O(1)
【代码】
public static void main(String[] args) { int[] res={1,-2,3,5,-2,6,-1}; int r=maxSon1(res); System.out.println(r); } //子数组的最大累加和问题 public static int maxSon(int[] arr){ if(arr==null||arr.length==0){ return 0; } int maxRes=Integer.MIN_VALUE; for(int i=0;i<arr.length;i++){ int temp=arr[i]; for(int j=i+1;j<arr.length;j++){ maxRes=Math.max(maxRes, temp+=arr[j]); } } return maxRes; } public static int maxSon1(int[] arr){ if(arr==null||arr.length==0){ return 0; } int maxRes=Integer.MIN_VALUE; int temp=0; for(int i=0;i<arr.length;i++){ temp+=arr[i]; maxRes=Math.max(maxRes, temp); temp=temp>0?temp:0; //判断是否继续累加(temp<0,表示累加和为负了,应从下一个数重新累加) } return maxRes; }
阅读全文