Leetcode Java Peak Index in a Mountain Array
업데이트:
문제
코드
class Solution {
public int peakIndexInMountainArray(int[] arr) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
int mid = left + ((right - left) / 2);
if (arr[mid] > arr[mid + 1]) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
}
결과
설명
- 산의 높이가 저장된 arr을 이용하여 산꼭대기를 찾는 문제이다.
- 단, O(logN)의 시간 복잡성으로 문제를 풀어야 한다.
- 0 < i < $arr.length - 1$일 때, 아래를 만족한다.
- arr[0] < arr[1] < … < arr[i - 1] < arr[i]
- arr[i] > arr[$i + 1$] > … > arr[$arr.length - 1$]
- 산꼭대기는 arr[0] < arr[1] < … < arr[$i - 1$] < arr[i] > arr[$i + 1$] > … > arr[$arr.length - 1$]를 만족한다.
-
left와 right는 좌측과 우측 기준으로 탐색할 변수로, 0과 $arr.length - 1$로 초기화한다.
- left가 right 미만일 때 까지 아래를 수행한다.
- mid에 $left + \frac{right - left}{2}$를 넣어준다.
- arr의 mid번째 값이 $mid + 1$번째 값보다 큰 경우, 우측으로 탐색해야하므로 right에 mid를 넣어준다.
- 위를 만족하지 않으면, 좌측으로 탐색해야하므로 left에 $mid + 1$을 넣어준다.
- 반복이 완료되면 산꼭대기의 위치가 저장된 left를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기