分析:
这里需要理解
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;
    }