https://leetcode.com/problems/find-peak-element/?envType=study-plan-v2&envId=top-interview-150
주어진 0-인덱스 정수 배열 nums에서, "peak element"는 해당 요소가 그 주변 요소보다 엄격하게 큰 요소를 의미합니다. 이제 주어진 배열에서 어떤 피크 요소를 찾고, 그 인덱스를 반환해야 합니다. 배열에 여러 개의 피크가 있는 경우, 어떤 피크의 인덱스든 반환해야합니다
nums[-1] = nums[n] = -∞로 가정할 수 있습니다. 다시 말해, 배열 밖에 있는 이웃보다 요소가 항상 엄격하게 큰 것으로 간주됩니다.
O(log n) 시간 내에 실행되는 알고리즘을 작성해야 합니다.
이진 탐색 알고리즘을 활용하여 배열에서 피크 요소를 찾습니다. 중간 지점을 선택하고 이웃한 요소들과 비교하여 이동하는 방식을 사용하여 O(log n) 시간 내에 피크 요소를 신속하게 식별합니다.
class Solution {
public int findPeakElement(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] > nums[mid + 1]) {
// 현재 요소가 다음 요소보다 크면 왼쪽 부분을 탐색
right = mid;
} else {
// 다음 요소가 현재 요소보다 크면 오른쪽 부분을 탐색
left = mid + 1;
}
}
// left와 right가 같은 위치에서 루프가 종료되면 피크 요소의 인덱스가 됩니다.
return left;
}
}
Runtime 0ms