码迷,mamicode.com
首页 > 编程语言 > 详细

返回一个整数数组中最大子数组的和(一)

时间:2020-02-26 17:06:52      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:for   网上   str   个数   max   pre   复杂   out   string   

要求:

1、输入一个整形数组,数组里有正数也有负数。

2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

3、求所有子数组的和的最大值。要求时间复杂度为O(n)。

 

源代码

 1 package HomeTest;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.Random;
 6 
 7 public class MaxS {
 8     public static void main(String[] args) {
 9         List<Integer> list = new ArrayList<>();
10         int sum = Integer.MIN_VALUE;
11         int i, max = sum;
12         Random random = new Random();
13         int length = random.nextInt(6);
14         for (i = 0; i < length; i++) {
15             list.add(random.nextBoolean() ? random.nextInt(10) : random.nextInt(10) * (-1));
16         }
17         for (i = 0; i < length; i++) {
18             System.out.print(list.get(i).intValue() + "   ");
19         }
20         System.out.println();
21         for (i = 0; i < length; i++) {
22             if (sum < 0) {
23                 sum = list.get(i).intValue();
24             } else {
25                 sum += list.get(i).intValue();
26             }
27             if (max < sum) {
28                 max = sum;
29             }
30         }
31         System.out.println(max);
32     }
33 }

数组长度与元素利用随机数产生(但是我使用的随机数函数会产生范围在[0,d)之间的随机数,会出现0的情况,当数组长度为0时便会出现bug)

 

思路

  设计一个数组来存子串,将第一个元素加入子串,如果第一个元素是正数,此时子串的和是正数,将第二个元素加入子串,再用该子串与第三个元素相加;如果第一个元素是负数,此时子串的和是负数,那么去除子串中的所有元素,将第二个元素加入到子串中,再求和,然后在用该子串和第三个元素进行运算。依此往后类推。

 

结果截图

技术图片

这个问题总体上来说其实并不是太难,但我并没有很快的想出解决方法,最后还是靠网上寻求案例以及在同学的帮助之下解决了问题,我对于算法设计这一方面的知识仍然太薄弱,还是需要提高自己的算法设计能力才行。

 

返回一个整数数组中最大子数组的和(一)

标签:for   网上   str   个数   max   pre   复杂   out   string   

原文地址:https://www.cnblogs.com/best-hym/p/12367664.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!