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

    要求

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

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

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

    一、源代码

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    public class hello {
        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(5);
            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);
        }
    }

    二、结果截图

     (数组长度和元素都为随机生成)

    三、设计思想

      假象一个数组来存子串,将第一个元素加入子串,如果第一个元素是负数,此时子串的和是负数,那么第二个元素加上该子串的和肯定会变小,那么去除子串中的所有元素,将第二个元素加入到子串中,再求和,然后在用该子串和第三个元素进行运算;如果第一个元素是正数,那么此时子串的和是正数,那么第二个元素加上该子串肯定会变大,那么将第二个元素加入子串,再用该子串与第三个元素进行逻辑运算。依次往后类推。

    四、出现的问题

      目前采用随机数的方法来生成数组长度和元素,但是随机数我使用的是Random类的nextint(int d)方法,这样会产生[0,d)的随机数,也有可能会产生0,当数组长度为0时便会出现问题。

    五、解决方案

      可以使用相关的运算产生不含0的随机数。

    六、总结

      该问题如果相通的话不是很难,但是刚开始却纠结于负数等问题,在网上搜索了相关的资料后才有的思路,自己的算法设计能力还是太低了,以后要多多学习相关的思想和知识!

  • 相关阅读:
    gerapy+scrapyd组合管理分布式爬虫
    selenium之chromedriver与谷歌浏览器映射,到谷歌71.0版本的
    windows10下成功安装docker splash及遇到问题的解决方案
    python安装win32api pywin32 后出现 ImportError: DLL load failed
    git客户端安装
    linux相关命令
    springboot集成swagger2
    git远程分支创建,本地分支关联远程分支,第一次发布、更新分支
    spring事件监听机制
    JavaScript页面被卷去的头部兼容性解决方案
  • 原文地址:https://www.cnblogs.com/wuren-best/p/12366313.html
Copyright © 2011-2022 走看看