zoukankan      html  css  js  c++  java
  • 个人作业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;  
        }
    }

  • 相关阅读:
    洛谷P1070 道路游戏
    洛谷P1556 幸福的路
    洛谷P1457 城堡 The Castle
    洛谷P1298 最接近的分数
    2017-9-13 NOIP模拟赛[xxy]
    洛谷P3405 [USACO16DEC]Cities and States省市
    洛谷P1549 棋盘问题(2)
    洛谷P1578 奶牛浴场
    洛谷P2073 送花
    洛谷P3797 妖梦斩木棒
  • 原文地址:https://www.cnblogs.com/1983185414xpl/p/10507204.html
Copyright © 2011-2022 走看看