代码是看的网上的 自己的代码不能做到 O(n) 的状况
看了一下 设计思路大概是 将几个数的数组 的Sum[0]开始累加,判断两种情况
一种是 累加数值>=0 这种情况 将 后续 max保存下来就行了
另一种是 <=0 这是将 累加 数值 重置
方法很简单 思路十分清晰 。在课上做这个小练时 ,一开始 太注重给O(n)这个 结果的 时间复杂度
当放下它时 潜意识还是会 把他考虑在内 没有想到最简单的方法 但是大体思路与 上述代码相同
package main; public class Item { public static void main(String args[]) { int array[] = {9,-1,3,-9,-6,6,-3,1}; System.out.println(findMax(array)); } public static int findMax(int array[]){ //加上约束条件,防止当数组为空时造成数组越界 if (array.length == 0) { return 0; } int max = array[0]; int sum = 0; for(int i=0; i<array.length; i++){ //如果加上某个元素sum>=0的话,就加; //当数组全为负数的时候只要有加法就一定比原来的数小,此时就相当于找出数组内最大的数 if(sum >= 0) { sum += array[i]; } else{ sum = array[i]; //否则从当前位置重新计算 } if(sum > max){ max = sum; } } return max; } }