Skip to content

Latest commit

 

History

History

1800.Maximum Ascending Subarray Sum

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

English Version

题目描述

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

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

已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 il <= 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

 

提示:

  • 1 <= nums.length <= 100
  • 1 <= nums[i] <= 100

解法

Python3

class Solution:
    def maxAscendingSum(self, nums: List[int]) -> int:
        res, cur = 0, nums[0]
        for i in range(1, len(nums)):
            if nums[i] > nums[i - 1]:
                cur += nums[i]
            else:
                res = max(res, cur)
                cur = nums[i]
        res = max(res, cur)
        return res

Java

class Solution {
    public int maxAscendingSum(int[] nums) {
        int cur = nums[0];
        int res = 0;
        for (int i = 1; i < nums.length; ++i) {
            if (nums[i] > nums[i - 1]) {
                cur += nums[i];
            } else {
                res = Math.max(res, cur);
                cur = nums[i];
            }
        }
        res = Math.max(res, cur);
        return res;
    }
}

TypeScript

function maxAscendingSum(nums: number[]): number {
    let res = 0, sum = nums[0];
    for (let i = 1; i < nums.length; ++i) {
        if (nums[i] > nums[i - 1]) {
            sum += nums[i];
        } else {
            res = Math.max(res, sum);
            sum = nums[i];
        }
    }
    res = Math.max(res, sum);
    return res;
};

C++

class Solution {
public:
    int maxAscendingSum(vector<int>& nums) {
        int res = 0, cur = nums[0];
        for (int i = 1; i < nums.size(); ++i) {
            if (nums[i] > nums[i - 1]) {
                cur += nums[i];
            } else {
                res = max(res, cur);
                cur = nums[i];
            }
        }
        res = max(res, cur);
        return res;
    }
};

Go

func maxAscendingSum(nums []int) int {
	res, cur := 0, nums[0]
	for i := 1; i < len(nums); i++ {
		if nums[i] > nums[i-1] {
			cur += nums[i]
		} else {
			if res < cur {
				res = cur
			}
			cur = nums[i]
		}
	}
	if res < cur {
		res = cur
	}
	return res
}

...