写点什么

【LeetCode】最大升序子数组和 Java 题解

作者:Albert
  • 2022 年 10 月 07 日
    北京
  • 本文字数:863 字

    阅读完需:约 3 分钟

题目描述

给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。


子数组是数组中的一个连续数字序列。


已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 i(l <= i < r),numsi < numsi+1 都成立,则称这一子数组为 升序 子数组。注意,大小为 1 的子数组也视作 升序 子数组。


示例 1:
输入:nums = [10,20,30,5,10,50]输出:65解释:[5,10,50] 是元素和最大的升序子数组,最大元素和为 65 。示例 2:
输入:nums = [10,20,30,40,50]输出:150解释:[10,20,30,40,50] 是元素和最大的升序子数组,最大元素和为 150 。 示例 3:
输入:nums = [12,17,15,13,10,11,12]输出:33解释:[10,11,12] 是元素和最大的升序子数组,最大元素和为 33 。
来源:力扣(LeetCode)链接:https://leetcode.cn/problems/maximum-ascending-subarray-sum著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
复制代码

思路分析

  • 今天的算法题目是数组题目,题目要求计算最大升序子数组和。分析题目,这里的关键点是

  • 正整数组成的数组 nums,由于是求最大的和,可以直接累加。

  • 子数组是数组中的一个连续数字序列。重点关键字是 "连续"。

  • 分析了题目重点,我们直接采用模拟的办法,先确定 tempSum = nums[i], 然后一直累加到 nums[i] <= nums[i+1]。即为其中的一个子数组之和,写数组题目的时候,我们要注意下标边界,动态更新 ans 即可。

  • 具体实现代码如下,供参考。

通过代码

class Solution {    public int maxAscendingSum(int[] nums) {        int ans = 0;        int n = nums.length;        for (int i = 0; i < n; i++) {            int tempSum = nums[i];            int j = i + 1;            while (j < n && nums[i] < nums[j]) {                tempSum += nums[j];                j++;                i++;            }            ans = Math.max(ans, tempSum);        }
return ans; }}
复制代码

总结

  • 上述算法的时间复杂度是 O(n),空间复杂度是 O(1)

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 3
用户头像

Albert

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】最大升序子数组和Java题解_LeetCode_Albert_InfoQ写作社区