【Java刷题 24-2】力扣:题目、1800. 最大升序子数组和

129 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 天,点击查看活动详情


题目、1800. 最大升序子数组和

原题链接:1800. 最大升序子数组和

题目描述

给你一个正整数组成的数组 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 。

/

示例 4:

输入:nums = [100,10,1]

输出:100

解题思路

题目要求我i们获取到,数组所有升序序列中,最大的元素和。

那么我们可以通过遍历数组来实现,一边遍历数组,一边记录元素和,当检测到下一个元素值小于或等于当前元素,也就代表两者无法构成升序数组,我们将最大元素和记录下来,然后将元素和清零,重复操作。

当遍历完整个数组,我们也遍历完了所有升序序列的元素和,自然可以得到其中的最大元素和并返回....

提交代码

class Solution {
    public int maxAscendingSum(int[] nums) {
        int curr = 0;                     //表示当前元素和
        int max = 0;                      //表示最大元素和
        int n = nums.length - 1;          //数组最后一个元素的下标
        for(int i = 0;i < n;++i){         //遍历数组
            curr += nums[i];              //数字累加
            if(nums[i] >= nums[i+1]){     //若与下一个元素无法组成升序数组
                max = Math.max(max,curr); //记录当前最大元素和
                curr = 0;                 //元素和清零
            }
            
        }
        //我们只遍历到了数组的倒数第二位:
        //还需要在当前最大元素和 与 最后一个升序数组的元素和比较大小
        return Math.max(max,curr + nums[n]);
    }
}

提交结果

在这里插入图片描述