个人作业1 -数组

代码是看的网上的   自己的代码不能做到 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;  
    }
}

原文地址:https://www.cnblogs.com/1983185414xpl/p/10507204.html