本题目要求时间复杂度为O(n),一开始我也是有点懵逼的,看了下题解,发现很多不符合题目标准,本题的测试数据也无法覆盖全面,有些解答有些问题。故自己写了一下详细的解题思路。
1.首先我觉得这道题跟分治法没有什么关系。
2.原理就是从一端推数据,可以从index=1开始推进判断,如果"前一个值" + "当前值" > "当前值",那么保留累加结果至当前值,这个怎么理解呢?其实意思就是就是需要把符合当前条件的累加和向右推,一旦发现累加后还不如当前值,那么前面所有数据就可以放弃了。
3.这里我从 1遍历至(length-1)的位置,最后的位置没有必要去遍历,如果最后一个值是正,那么与倒数第二个相加就可以了,反之,舍弃最后一个值。
public int maxsumofSubarray (int[] arr) { for (int i = 1; i < arr.length - 1; i++) { if(arr[i] + arr[i-1]>arr[i]){ arr[i] = arr[i] + arr[i-1]; } } return arr[arr.length - 1] > 0 ? arr[arr.length - 1] + arr[arr.length - 2] : arr[arr.length - 2]; }