• [Java]剑指offer:子数组的最大累加和问题


    题目描述

    给定一个数组arr,返回子数组的最大累加和
    例如,arr = [1, -2, 3, 5, -2, 6, -1],所有子数组中,[3, 5, -2, 6]可以累加出最大的和12,所以返回12.
    题目保证没有全为负数的数据
    [要求]
    时间复杂度为O(n)O(n),空间复杂度为O(1)O(1)
     

    输入

    [1, -2, 3, 5, -2, 6, -1]

    返回值

    12

    思路

    如果arr中没有正数,那么产生的最大累加和一定是数组中的最大值

    如果arr中有正数,从左到右遍历arr,用变量cur记录每一步的累加和。

    当cur<0的时候,说明累加的这一部分肯定不能作为产生最大累加和子数组的左边部分。所以此时让cur=0,表示cur从下一个数开始重新累加。当cur>0的时候,每次累加都可能是最大累加和,所以用另一个变量max全程跟踪记录cur出现的最大值即可。

    import java.util.*;
    
    
    public class Solution {
        /**
         * max sum of the subarray
         * @param arr int整型一维数组 the array
         * @return int整型
         */
        public int maxsumofSubarray (int[] arr) {
            if(arr.length==0||arr==null){
                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;
        }
    }
    

      

  • 相关阅读:
    WebGL-四之二
    WebGL-四之一
    mybatis中批量更新的问题
    nginx+tpmcat+redis实现session共享
    myeclipse快捷方式汇总
    StringBuffer的append方法比“+”高效
    《Thinking in Java》 And 《Effective Java》啃起来
    JAVA链表中迭代器的实现
    myeclipse从SVN检出项目报错
    C#中清空ListView中的数据
  • 原文地址:https://www.cnblogs.com/blzm742624643/p/14669738.html
Copyright © 2020-2023  润新知