[LeetCode_376] Wiggle Subsequence(Python)

그냥·2024년 8월 6일
0

알고리즘

목록 보기
14/23

https://leetcode.com/problems/wiggle-subsequence/description/

문제


코드

class Solution:
    def wiggleMaxLength(self, nums: List[int]) -> int:
        def wiggle(start):
            flag = start
            stk = []
            for i in range(len(nums)):
                if flag == 'minus':
                    if stk and stk[-1] >= nums[i]:
                        stk.pop()
                    else:
                        flag = 'plus'
                else:
                    if stk and stk[-1] <= nums[i]:
                        stk.pop()
                    else:
                        flag = 'minus'
                stk.append(nums[i])
            return len(stk)
        x = wiggle('plus')
        y = wiggle('minus')
        return max(x, y)

Idea1

  • start -> 'plus', 'minus' 따로 생각

  • plus
    -> stk의 마지막 값보다 큰 값이 들어와야 함 -> stk상단 pop (더 큰 값으로 갱신)
    -> 작은 값이 들어오는 경우 -> minus 전환

  • minus
    -> stk의 마지막 값보다 작은 값이 들어와야 함 -> stk상단 pop (더 작은 값으로 갱신)
    -> 큰 값이 들어오는 경우 -> plus 전환

0개의 댓글