Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 가장 긴 교대 불평등 요소 하위 목록의 길이를 찾는 프로그램

<시간/>

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