연속된 숫자 간의 차이가 양수와 음수 사이에서 엄격하게 번갈아 나타나는 경우 숫자 시퀀스를 워블 시퀀스라고 합니다. 첫 번째 차이점(존재하는 경우)은 긍정적일 수도 있고 부정적일 수도 있습니다. 하나의 요소만 있거나 두 개의 서로 다른 요소가 있는 시퀀스도 워블 시퀀스로 간주됩니다.
-
예를 들어 양수 값과 음수 값 사이에 차이가 번갈아 표시되므로 스윙 시퀀스
[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 블로그
추천 기사: