162. Find Peak Element - Medium
前往題目
想法
Binary search
,只要注意左右邊界外的數字都比界內數字小
思路
- 一般的
Binary search
- 每次選中
mid
看其左右邊相鄰數字 - 如果左邊比較大那他就有可能是
peak
,所以往左邊繼續找,因為當前數字比他小;反之右邊也是如此道理 - 左右邊都沒有比較大的時候就是找到
peak
了,邊界也是一樣,因為界外數字一定比較小
Code
這題想得有點複雜,其實規律就是哪邊有比較大的就往哪邊找,還有個很重要的條件,相鄰不會相等
,所以一定會有peak
class Solution {
public int findPeakElement(int[] nums) {
int l = 0, r = nums.length - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
// Left is bigger
if (mid - 1 >= 0 && nums[mid - 1] > nums[mid]) {
r = mid - 1;
} else if (mid + 1 < nums.length && nums[mid + 1] > nums[mid]) {
l = mid + 1;
} else { // Found peak
return mid;
}
}
return 0;
}
}
162. Find Peak Element - Medium
https://f88083.github.io/2024/09/13/162-Find-Peak-Element-Medium/