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

Python의 숫자 목록에서 로컬 피크 요소 인덱스를 찾는 프로그램

<시간/>

길이가 최소 2인 nums라는 숫자 목록이 있다고 가정합니다. 목록에서 모든 피크의 인덱스를 찾아야 합니다. 목록은 오름차순으로 정렬됩니다. 지수 i는 −

일 때 피크입니다.
  • nums[i]> nums[i + 1], i =0일 때

  • nums[i]> nums[i - 1] i =n - 1일 때

  • 숫자[i - 1] <숫자[i]> 숫자[i + 1] 기타

따라서 입력이 nums =[5, 6, 7, 6, 9]와 같다면 출력은 [2, 4]가 됩니다. 인덱스 2의 요소는 2개의 이웃보다 큰 7이고 항목은 7이기 때문입니다. 인덱스 4는 9이며 왼쪽 항목보다 큽니다.

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

  • ans :=새 목록

  • n :=숫자 크기

  • n이 1과 같으면

    • 반환

  • 각 인덱스 i 및 숫자 num에 대해 수행

    • i> 0이고 i

      • nums[i - 1] nums[i + 1]이면

        • ans의 끝에 i 삽입

      • i가 0과 같으면

        • num> nums[i + 1]이면

          • ans의 끝에 i 삽입

      • i가 n - 1과 같으면

        • num> nums[i - 1]이면

          • ans의 끝에 i 삽입

  • 반환

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

def solve(nums):
   ans = []
   n = len(nums)

   if n == 1:
      return ans

   for i, num in enumerate(nums):
      if i > 0 and i < n - 1:
         if nums[i - 1] < num > nums[i + 1]:
            ans.append(i)

      if i == 0:
         if num > nums[i + 1]:
            ans.append(i)

      if i == n - 1:
         if num > nums[i - 1]:
            ans.append(i)

   return ans

nums = [5, 6, 7, 6, 9]
print(solve(nums))

입력

[5, 6, 7, 6, 9]

출력

[2, 4]