==========================努力奋斗财源广进==========================
给定一个长度为n的数组nums,请你找到峰值并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个所在位置即可。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int findPeakElement (int[] nums) {
// write code here
int len = nums.length;
if(len == 1) return 0;
if(nums[0] > nums[1]) return 0;
if(nums[len-1] > nums[len-2]) return len-1;
int left = 0, right = len - 1, ans = -1;
while(left <= right){
int mid = (left + right)/2;
if(nums[mid] > nums[mid+1] && nums[mid] > nums[mid-1]){
ans = mid;
break;
}
if(nums[mid] < nums[mid+1]){
left = mid + 1;
} else{
right = mid - 1;
}
}
return ans;
}
}
public int findPeakElement (int[] nums) {
// write code here
//简单题
int len = nums.length;
if( len == 1) return 0;
if(nums[0] > nums[1]) return 0;
if(nums[len-1] > nums[len-2]) return len - 1;
int left = 0, right = len - 1;
while(left < right){
int mid = (left + right) / 2;
if(nums[mid] > nums[mid+1]){
right = mid;
} else {
left = mid + 1;
}
}
return left;
此题解法为最优,就是使用二分法。 首先要处理特殊值,就是数组长度为1的时候,数组为2的时候,以及数组前两个和后两个的值的时候。 当数组大于2时,再考虑其他的。 使用到的主要思想就是爬坡。取中点当成标杆值,和后一个值进行比对。根据比值结果再进行判断。当标杆值小于后一个值的时候,往后就一定存在峰值。当标杆值大于后一个值的时候,往前就一定存在峰值。
评论区记录复习记录
评论