zoukankan      html  css  js  c++  java
  • 返回一个整数数组中最大子数组的和(一)

    要求:

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

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

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

    源代码

     package HomeTest;
     
     import java.util.ArrayList;
     import java.util.List;
     import java.util.Random;
     
     public class MaxS {
         public static void main(String[] args) {
             List<Integer> list = new ArrayList<>();
             int sum = Integer.MIN_VALUE;
             int i, max = sum;
             Random random = new Random();
             int length = random.nextInt(6);
             for (i = 0; i < length; i++) {
                 list.add(random.nextBoolean() ? random.nextInt(10) : random.nextInt(10) * (-1));
             }
             for (i = 0; i < length; i++) {
                 System.out.print(list.get(i).intValue() + "   ");
             }
             System.out.println();
             for (i = 0; i < length; i++) {
                 if (sum < 0) {
                     sum = list.get(i).intValue();
                 } else {
                     sum += list.get(i).intValue();
                 }
                 if (max < sum) {
                     max = sum;
                 }
             }
             System.out.println(max);
         }
     }

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

    思路

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

    结果截图

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

  • 相关阅读:
    事务
    javascript用window open的子窗口关闭自己并且刷新父窗口
    设置eclipse自动生成的author等注释
    使用Mockito对类成员变量进行Mock
    Linux进程简介
    WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
    长连接的定义及其优缺点,以及在不同的浏览器中的支持情况
    Sql为什么连接不上服务器上的数据库
    mysql批量导入已经格式好的文本数据
    Ant是什么
  • 原文地址:https://www.cnblogs.com/best-hym/p/12367664.html
Copyright © 2011-2022 走看看