连续子数组的最大和

java

一个比较实用&简单的思想

分析得:

  • 题目的意思其实是求最大连续子序列 求最大子序列有一个规则: 负数和任何数相加只会越来越小
  • a[] = {-1,1,3,-20,4,-1,4}
  • 时间复杂度为O(n)

解法一

public int FindGreatestSumOfSubArray(int[] array) {
        int length = array.length;
        int max = array[0];  //设最大的子序列为 a[0]
        int newMax = array[0];  //记录新的子序列的和
        for (int i = 1; i < length; i++) {    //a[] = {-1,1,3,-20,4,-1,4}
            if (newMax < 0) {             
                newMax = 0;     //判断子序列如果小于0  则从下一个位置开始计算最大值   例如:第一个数为a[0]=-1 则从a[1]开始计算
            }
            newMax += array[i];   //子序列的和
            if (newMax > max) {  
                max = newMax;
            }
        }
        return max;
    }

解法二: 一个比较常规的方法

遍历数组, 记录每一种可能
时间复杂度O(N^2)

    public int FindGreatestSumOfSubArray(int[] array) {
        int length = array.length;
        int max = array[0];
        for (int i = 0; i < length; i++) {   //记录其实位置
            int temp = 0;
            for (int j = i; j < length; j++) {  //从起始位置开始往后累加  记录每一次的结果  然后和最大值比较
                temp += array[j];
                if (temp > max) {
                    max = temp;
                }
            }
        }
        return max;
    }
全部评论

相关推荐

04-02 12:26
已编辑
中南大学 PHP
点赞 评论 收藏
分享
野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
03-16 13:56
湖南大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务