• 算法总结之 子数组的最大累加问题


      给定一个数组arr, 返回子数组的最大累加和

    要求 如果长度为N  要求时间复杂度O(N)  额外空间复杂度O(1)

     解题思路:

        如果没有正数  产生的最大累加和一定是 数中最大的那个

        如果有正数 遍历到正数增加 遍历到负数减小    当小于0时候 说明累加到当前数出现了小于0的结果,那么累加的这一部分肯定不能作为生产最大累加和的子数组的右边部分。此时令其为0  编故事重新从下一个开始累加

                           当其大于等于0时, 每次累加都可能是最大的累加和,用另一个变量max全程跟踪记录出现的最大值即可

    废话不多说,上代码一目了然

    package TT;
    
    public class Test76 {
    
        public static int maxSum(int[] arr){
            
            if(arr==null  ||  arr.length==0){
                return 0;
            }
            int max = Integer.MIN_VALUE;
            int cur = 0;
            for (int i = 0; i < arr.length; i++) {
                cur +=arr[i];
                max=Math.max(max, cur);
                cur = cur<0 ? 0 :cur;
            }
            
            return max;
        }
        
        public static void main(String[] args){
            
              int[] arr = new int[7];
              arr[0]=1;
              arr[1]=-2;
              arr[2]=3;
              arr[3]=5;
              arr[4]=-2;
              arr[5]=6;
              arr[6]=-1;
              
              int x = maxSum(arr);
              System.out.println(x);
              
              
              
              
            
            
        }
        
        
        
    }
  • 相关阅读:
    iis日志时间与本地日期不一样
    iis原理介绍
    IIS如何确定请求的处理程序
    handle 和module
    调试IIS服务器
    JS面向对象学习
    图片垂直居中大杂烩
    淘宝双十一页面(Flexible)
    用rem适配移动端
    About getByClass
  • 原文地址:https://www.cnblogs.com/toov5/p/7493156.html
Copyright © 2020-2023  润新知