넘치게 채우기

[LeetCode] 3105. Longest Strictly Increasing or Strictly Decreasing Subarray 본문

PS/LeetCode

[LeetCode] 3105. Longest Strictly Increasing or Strictly Decreasing Subarray

riveroverflow 2025. 2. 3. 16:45
728x90
반응형

https://leetcode.com/problems/longest-strictly-increasing-or-strictly-decreasing-subarray/description/

leetcode - Longest Strictly Increasing or Strictly Decreasing Subarray

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

문제 난이도: Easy

 

문제

You are given an array of integers nums. Return the length of the longest subarray of nums which is either strictly increasing or strictly decreasing.

 

정수 배열 nums가 주어진다. 가장 긴 오름차순 또는 내림차순 부분배열의 길이를 구하시오.

 

풀이

길이 1부터 시작한다. 0번칸은 0이기 때문이다.

i번칸이 i-1번칸보다 크면 증가스트릭을 1 증가시키고, 감소스트릭을 1로 만든다.

i번칸이 i-1번칸보다 작으면 감소스트릭을 1 감소시키고, 증가스트릭을 1로 만든다.

i번칸이 i-1번칸과 같으면 두 스트릭 모두 1로 초기화한다.

그리고 매번 최대값을 갱신시킨다.

 

최종적인 최대값을 반환하면 된다.

 

코드

C++

class Solution {
public:
    int longestMonotonicSubarray(vector<int>& nums) {
        int n = nums.size()   ;
        if(n == 1) return 1;

        int incStreak = 1;
        int decStreak = 1;
        int ans = 0;
        for(int i = 1; i < n; ++i) {
            if(nums[i] > nums[i-1]) {
                decStreak++;
                incStreak = 1;
            } else if(nums[i] < nums[i-1]) {
                incStreak++;
                decStreak = 1;
            } else {
                incStreak = 1;
                decStreak = 1;
            }
            ans = max(ans, max(incStreak, decStreak));
        }

        return ans;
    }
};

 

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func longestMonotonicSubarray(nums []int) int {
    n := len(nums)
    if n == 1 {
        return 1;
    }

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

        ans = max(ans, max(incStreak, decStreak))
    }

    return ans
}
728x90
반응형