子数组的最大累加和

题目:

给定一个数组arr,返回子数组的最大累加和。例如:arr[1,-2,3,5,-2,6,-1],所有的子数组中,[3,5,-2,6]可以累加出最大值为12,所以返回12.

分析:

1.如果数组中没有正数,产生的最大和就是数组中的最大值。

2.如果arr中有正数,从左到右遍历arr,用变量cur记录每一步的累加和,遍历到正数cur增加,遍历到负数cur减少,当cur<0时,说明累加到当前数出现小于0,那么累加这一部分不能作为产生最大累加和

的子数组左边部分,此时令cur=0,表示重新从下一个数开始累加。当cur>=0时,每一次累加都可能是最大累加和,所以用另一个变量max记录cur出现的最大值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package demo2;
 
public class Main {
 
    public static void main(String[] args) {
        int array[] = {6,-3,-2,7,-15,1,2,2};
         
        int sum = FindGreatestSumOfSubArray(array);
         
        System.out.println(sum);
    }
     
     
     
     
     
     
     
     
     public static int FindGreatestSumOfSubArray(int[] array) {
      
         if (array == null || array.length == 0) {
             return 0;
         }
         int max = Integer.MIN_VALUE;
         int cur = 0;
         for (int i=0;i<array.length;i++) {
             cur += array[i];
             max = Math.max(max, cur);
             cur = cur<0?0:cur;
         }  
         return max;
          
     }
     
}

 

posted on   airycode  阅读(1791)  评论(0编辑  收藏  举报

编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示