nums라고 하는 mumber 목록이 있고 모든 연속 숫자 사이의 동등 관계가 보다 작음 및 보다 큼 연산 사이에서 교대로 변경되도록 가장 긴 하위 목록 innum의 길이를 찾습니다. 처음 두 숫자의 부등식은 보다 작거나 클 수 있습니다.
따라서 입력이 nums =[1, 2, 6, 4, 5]와 같으면 가장 긴 부등식 교번 하위 목록이 [2, 6, 4, 5]이므로 2 <6> 4이므로 출력은 4가 됩니다. <5.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
get_direction() 함수를 정의합니다. 이것은, b
-
a가 b와 같으면 0을 반환하거나 a 이면 -1
-
-
숫자의 크기가 2보다 작으면
-
숫자의 크기를 반환
-
-
max_length :=1, cur_length :=1, last_direction :=0
-
범위 0에서 숫자 - 1까지의 i에 대해 수행
-
방향 :=get_direction(nums[i], nums[i + 1])
-
방향이 0과 같으면
-
cur_length :=1
-
-
그렇지 않으면 방향이 last_direction과 같을 때
-
cur_length :=2
-
-
그렇지 않으면
-
cur_length :=cur_length + 1
-
-
max_length :=max_length 및 cur_length의 최대값
-
last_direction :=방향
-
-
반환 max_length
더 나은 이해를 위해 다음 구현을 살펴보겠습니다-
예시
class Solution: def solve(self, nums): if len(nums) < 2: return len(nums) def get_direction(a, b): return 0 if a == b else -1 if a < b else 1 max_length = 1 cur_length = 1 last_direction = 0 for i in range(len(nums) - 1): direction = get_direction(nums[i], nums[i + 1]) if direction == 0: cur_length = 1 elif direction == last_direction: cur_length = 2 else: cur_length += 1 max_length = max(max_length, cur_length) last_direction = direction return max_length ob = Solution() nums = [1, 2, 6, 4, 5] print(ob.solve(nums))
입력
[1, 2, 6, 4, 5]
출력
4