zoukankan      html  css  js  c++  java
  • [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;
        }
    }
    

      

  • 相关阅读:
    搭建JavaWeb服务器
    Python网络爬虫相关基础概念
    Python网络爬虫 《http和https协议》
    jupyter环境安装
    js 解密,混淆,逆向
    selenium
    2、JNI说明
    1、Java快速入门
    4、基于JZ2440之编写测试代码处理(处理图片识别人脸)
    3、在编译过程中出现no space left on device
  • 原文地址:https://www.cnblogs.com/blzm742624643/p/14669738.html
Copyright © 2011-2022 走看看