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


    要求

    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的随机数。

    六、总结

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

  • 相关阅读:
    Python爬虫IP代理教程,让你不再为IP被封禁发愁
    一个值只有0和1的字段,到底要不要建索引.一个表只有一个字段,用不用索引
    SciVal
    除了article 和 review,还有哪些论文类型
    windows7/10文件夹中搜索指定大小的文件
    国内外大学IP地址段
    教你如何用proxyhunter找大学代理
    SCI JCR ESI等名词解释
    solr全文检索实现原理
    设计一个回调要注意哪些事情
  • 原文地址:https://www.cnblogs.com/wuren-best/p/12366313.html
Copyright © 2020-2023  润新知