leetCode 376. 스윙 시퀀스 동적 프로그래밍 + 다이어그램 + 상태 전송

376. 스윙시퀀스 - LeetCode

연속된 숫자 간의 차이가 양수와 음수 사이에서 엄격하게 번갈아 나타나는 경우 숫자 시퀀스를  워블 시퀀스라고 합니다. 첫 번째 차이점(존재하는 경우)은 긍정적일 수도 있고 부정적일 수도 있습니다. 하나의 요소만 있거나 두 개의 서로 다른 요소가 있는 시퀀스도 워블 시퀀스로 간주됩니다.

  • 예를 들어   양수 값과 음수 값 사이에  차이가 번갈아 표시되므로  스윙 시퀀스[1, 7, 4, 9, 2, 5]  입니다  .(6, -3, 5, -7, 3)

  • 대조적으로, 합은 진동 시퀀스가 [1, 4, 7, 2, 5] ​​아닙니다  [1, 7, 4, 5, 5] . 첫 번째는 처음 두 차이가 모두 양수이므로 두 번째는 마지막 차이가 0이기 때문입니다.

하위 시퀀스는  원래 시퀀스에서 일부 요소(또는 삭제하지 않음)를 삭제하고 나머지 요소는 원래 순서대로 유지하여 얻을 수 있습니다.

정수 배열이 주어지면  워블  시퀀스   에서  가장 긴 부분 시퀀스의 길이를nums  반환합니다   .nums

예시 1:

입력: nums = [1,7,4,9,2,5]
 출력: 6
 설명: 전체 시퀀스는 스윙 시퀀스이며 각 요소 간의 차이는 (6, -3, 5, -7, 3)입니다. .

예 2:

입력: nums = [1,17,5,10,13,15,10,5,16,8]
 출력: 7
 설명: 이 시퀀스에는 길이가 7인 워블 시퀀스가 ​​여러 개 포함되어 있습니다. 
그 중 하나는 [1, 17, 10, 13, 10, 16, 8]이고, 요소 간의 차이는 (16, -7, 3, -3, 6, -8)입니다.

예시 3:

입력: 숫자 = [1,2,3,4,5,6,7,8,9]
 출력: 2

>>아이디어 및 분석

공식 솔루션 376. 스윙 시퀀스 - LeetCode 및 본 글 376. 스윙 시퀀스 - LeetCode

주어진 문제를 해결하기 위한 아이디어 요약 및 요약

  • 시퀀스의 요소는 요소 양쪽의 인접한 요소가 요소보다 작은 경우에만 "피크" 라고 합니다. 예를 들어 [1,3,2,4] 시퀀스3은 "피크" 입니다.
  • 시퀀스의 요소는 요소 양쪽의 인접한 요소가 요소보다 큰 경우에만 "계곡" 이라고 합니다. 예를 들어 [1,3,2,4] 시퀀스2는 "계곡" 입니다.
  • 특히, 시퀀스의 양쪽 끝 부분에 위치한 요소의 경우, 한쪽의 인접한 요소만 그보다 작거나 크며, 이를 "피크" 또는 "밸리" 라고도 합니다 . 예를 들어 , [1,3,2,4] 시퀀스 에서 1"계곡" 이고 4 는 "피크" 입니다.

상태 정의:

  • up[i]: nums[0...i] 배열에서 가장 긴 상승 스윙 시퀀스
  • down[i]: nums[0...i] 배열에서 가장 긴 하강 스윙 시퀀스

상태 이전:

  • 숫자[i] > 숫자[i-1]: 업[i] = 다운[i-1] + 1; 아래로[i] = 아래로[i-1]
  • 숫자[i] < 숫자[i-1]: 위로[i] = 위로[i-1]; 아래로[i] = 위로[i-1] + 1

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        int n = nums.size();
        if (n < 2) {
            return n;
        }
        int up = 1, down = 1;
        for (int i = 1; i < n; i++) {
            if (nums[i] > nums[i - 1]) {
                up = down + 1;
            } else if (nums[i] < nums[i - 1]) {
                down = up + 1;
            }
        }
        return max(up, down);
    }
};

// 作者:力扣官方题解
// 链接:https://leetcode.cn/problems/wiggle-subsequence/solutions/805292/python3-yi-tu-sheng-qian-yan-by-v12de-ao-72b1/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

내 이전 기사: leetCode 376. Swinging Sequence Greedy Algorithm_Heheda( ̄▽ ̄)"의 블로그-CSDN 블로그

추천 기사:

376. 스윙시퀀스 - LeetCode

376. 스윙시퀀스 - LeetCode 

추천

출처blog.csdn.net/weixin_41987016/article/details/133470576