题解 | #子数组的最大累加和问题#
子数组的最大累加和问题
http://www.nowcoder.com/practice/554aa508dd5d4fefbf0f86e5fe953abd
分析:
这里需要理解
arr[i]=Math.max(arr[i],arr[i-1]+arr[i]);
举个例子理解: f(1) =( (f(0)+f(1))>f(1) )? (f(0)+f(1)) :f(1) ,简单理解也就是看前一个下标的值是否大于0,如果小于0则仍是当前下标值不变,若大于0的话 第二项(arr[1])的值为 前两项之和,如果下面有再大于0的,那么第三项就相当于前三项的和了。如果第三项比三项之和还大,那么值不变,重新累计。
max=Math.max(m,arr[i]);
这里也容易理解,就是将最大值和目前累计的值进行对比判断,大的存入max
代码:
public int maxsumofSubarray (int[] arr) { // write code here int max=0; //数组长度为1,直接返回第一项的值 if(arr.length==1) return arr[0]; for(int i=1;i<arr.length;i++){ arr[i]=Math.max(arr[i],arr[i-1]+arr[i]); max=Math.max(m,arr[i]); } return max; }