nums라는 숫자 목록이 있다고 가정합니다. (최소 길이 3) 값이 엄격하게 증가했다가 감소하도록 가장 긴 하위 목록의 길이를 찾아야 합니다.
따라서 입력이 nums =[7, 1, 3, 5, 2, 0]과 같으면 하위 목록이 [2, 4, 6, 3, 1]이므로 출력은 5가 됩니다. 엄격하게 증가하고 감소합니다 .
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- i :=0, n :=a의 크기, res :=-무한대
- 내가
- st :=나
- linc:=0, ldec:=0
- i
- linc :=linc + 1
- 나는 :=나는 + 1
- ldec :=ldec + 1
- 나는 :=나는 + 1
- res :=최대 res 및 (i - st + 1)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
class Solution: def solve(self, a): i, n, res = 0, len(a), float("-inf") while i < n - 2: st = i linc, ldec = 0, 0 while i < n - 1 and a[i] < a[i + 1]: linc += 1 i += 1 while i < n - 1 and a[i] > a[i + 1]: ldec += 1 i += 1 if linc > 0 and ldec > 0: res = max(res, i - st + 1) while i < n - 1 and a[i] == a[i + 1]: i += 1 return res if res >= 0 else 0 ob = Solution() nums = [8, 2, 4, 6, 3, 1] print(ob.solve(nums))이면 res를 반환합니다.
입력
[[8, 2, 4, 6, 3, 1]
출력
5