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

Python에서 인덱스 또는 로컬 피크를 찾는 프로그램

<시간/>

nums라는 숫자 목록이 있다고 가정합니다. 오름차순으로 정렬된 숫자에서 모든 피크 요소의 인덱스를 찾아야 합니다. 다음 세 가지 조건이 모두 충족될 때 피크 요소의 인덱스 i:1. nums[i]와 다른 오른쪽의 다음 숫자는 존재하지 않거나 nums[i]보다 작아야 합니다. 2. 의 이전 숫자 nums[i]와 다른 왼쪽이 없거나 nums[i]보다 작아야 합니다. 3. 왼쪽 또는 오른쪽에 nums[i]와 다른 숫자가 하나 이상 있습니다.

따라서 입력이 nums =[5, 8, 8, 8, 6, 11, 11]과 같으면 출력은 [1, 2, 3, 5, 6]이 됩니다. 피크 [1,2,3]. 그리고 11도 [5, 6]입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • n :=숫자 크기
  • ans :=새 목록
  • i :=0
  • 내가
  • i0 :=나는
  • i
  • 나는 :=나는 + 1
  • if (i0이 0 또는 nums[i0]> nums[i0 - 1]) 및 (i가 n 또는 nums[i0]> nums[i])이면
    • i0이 0이 아니거나 i가 n이 아니면
      • as 끝에 (i0에서 i-1까지의 목록) 삽입
  • 반환
  • 예시

    이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    def solve(nums):
       n = len(nums)
       ans = []
       i = 0
       while i < n:
          i0 = i
          while i < n and nums[i] == nums[i0]:
             i += 1
          if (i0 == 0 or nums[i0] > nums[i0 - 1]) and (i == n or nums[i0] > nums[i]):
             if i0 != 0 or i != n:
                ans.extend(range(i0, i))
       return ans
    
    nums = [5, 8, 8, 8, 6, 11, 11]
    print(solve(nums))

    입력

    [5, 8, 8, 8, 6, 11, 11]

    출력

    [1, 2, 3, 5, 6]