Find Peak Element I & II
public class Solution {
public int findPeakElement(int[] nums) {
if(nums == null || nums.length == 0) return -1;
if(nums.length == 1) return 0;
int left = 0;
int right = nums.length - 1;
while(left + 1 < right){
int mid = left + (right - left) / 2;
if(nums[mid - 1] < nums[mid] && nums[mid] > nums[mid + 1]){
// nums[mid] is valid peak
return mid;
} else if(nums[mid - 1] < nums[mid] && nums[mid] < nums[mid + 1]){
// nums[mid] is on an increasing trend
left = mid;
} else if(nums[mid - 1] > nums[mid] && nums[mid] > nums[mid + 1]){
// nums[mid] is on a decreasing trend
right = mid;
} else {
// nums[mid] is smaller than its neighbor, both directions have peak
right = mid;
}
}
return (nums[left] < nums[right]) ? right: left;
}
}关键在于 : 用当前行 / 列最大值的位置,代表整行 / 列。
Last updated