넘치게 채우기

[LeetCode] 1800. Maximum Ascending Subarray Sum 본문

PS/LeetCode

[LeetCode] 1800. Maximum Ascending Subarray Sum

riveroverflow 2025. 2. 4. 10:02
728x90
반응형

https://leetcode.com/problems/maximum-ascending-subarray-sum/description/

leetcode - Maximum Ascending Subarray Sum

문제 유형: 슬라이딩 윈도우

문제 난이도: Easy

 

문제

Given an array of positive integers nums, return the maximum possible sum of an ascending subarray in nums.

A subarray is defined as a contiguous sequence of numbers in an array.

A subarray [numsl, numsl+1, ..., numsr-1, numsr] is ascending if for all i where l <= i < r, numsi < numsi+1. Note that a subarray of size 1 is ascending.

양의정수 배열 nums가 주어집니다.

엄격한 오름차순의 부분배열의 요소들의 합의 최대값을 구하시오.

 

풀이

처음에는 nums[0]이 최대값이고, 현재의 부분배열의 총합이다.

i = 1부터 읽으면서,

nums[i]가 nums[i-1]보다 크면 sum을 계속 누적하고, 아니면, sum을 nums[i]로 초기화한다.

그 뒤, 최대값을 갱신한다.

 

 

코드

C++

class Solution {
public:
    int maxAscendingSum(vector<int>& nums) {
        int n = nums.size();
        int sum = nums[0];
        int ans = sum;
        for(int i = 1; i < n; ++i) {
            if(nums[i-1] < nums[i]) {
                sum += nums[i];
            } else sum = nums[i];

            ans = max(ans, sum);
        }

        return ans;
    }
};

 

Go

func maxAscendingSum(nums []int) int {
    n := len(nums)
    sum := nums[0]
    ans := nums[0]

    for i := 1; i < n; i++ {
        if nums[i] > nums[i-1] {
            sum += nums[i]
        } else {
            sum = nums[i]
        }
        if ans < sum {
            ans = sum
        }
    }

    return ans
}

 

728x90
반응형