LeetCode 1800. 最大升序子数组和

Posted 数据结构和算法

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1800. 最大升序子数组和相关的知识,希望对你有一定的参考价值。

截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666


这题可以参照《486,动态规划解最大子序和》使用动态规划来解决,但实际上不需要dp数组也可以解决。这题让求的是升序子数组的最大和,解题思路如下

  • 使用一个变量sum记录子数组的和
  • 当递增的时候,sum就累加
  • 当递减的时候,把当前元素的值赋值给sum,也就是重新开始统计
  • 使用一个变量max记录遍历过的升序子数组的最大和

如下图所示

原理比较简单,来看下代码

public int maxAscendingSum(int[] nums) {
    int sum = nums[0];
    int max = sum;
    for (int i = 1; i < nums.length; i++) {
        //如果是升序的,就一直累加
        if (nums[i] > nums[i - 1]) {
            sum += nums[i];
        } else {
            //如果是降序,sum就重新赋值
            sum = nums[i];
        }
        //记录最大的连续子数组的和
        max = Math.max(max, sum);
    }
    return max;
}

时间复杂度:O(n)
空间复杂度:O(1)

以上是关于LeetCode 1800. 最大升序子数组和的主要内容,如果未能解决你的问题,请参考以下文章

每日一题1800. 最大升序子数组和

每日一题1800. 最大升序子数组和

Leetcode 581.最短无序连续子数组

leetcode581 最短无序连续子数组(Easy不简单)

从只有 3 个有效移动的数组中制作最大长度升序子数组

LeetCode题目记录-643. 子数组最大平均数 I(C++代码实现)