길이가 최소 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]