배열이 있다고 가정해 보겠습니다. 앞의 모든 요소가 그보다 작은 요소와 그 뒤에 있는 모든 요소가 그보다 큰 요소를 찾아야 합니다. 마지막으로 요소의 인덱스를 반환하고 해당 요소가 없으면 -1을 반환합니다.
따라서 입력이 A - [6, 2, 5, 4, 7, 9, 11, 8, 10]과 같으면 출력은 4가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
n :=arr의 크기
-
maximum_left :=n 크기의 배열
-
maximum_left[0] :=-무한대
-
범위 1에서 n까지의 i에 대해 수행
-
maximum_left[i] :=maximum_left[i-1]의 최대값, arr[i-1]
-
-
minimum_right :=무한대
-
n-1 ~ -1 범위의 i에 대해 1 감소, 수행
-
maximum_left[i]
arr[i]이면 -
반환 i
-
-
minimum_right :=minimum_right의 최소값, arr[i]
-
반환 -1
-
-
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def get_element(arr): n = len(arr) maximum_left = [None] * n maximum_left[0] = float('-inf') for i in range(1, n): maximum_left[i] = max(maximum_left[i-1], arr[i-1]) minimum_right = float('inf') for i in range(n-1, -1, -1): if maximum_left[i] < arr[i] and minimum_right > arr[i]: return i minimum_right = min(minimum_right, arr[i]) return -1 arr = [6, 2, 5, 4, 7, 9, 11, 8, 10] print(get_element(arr))
입력
[6, 2, 5, 4, 7, 9, 11, 8, 10]
출력
4