题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
1、左右指针,找出中间点,比较趋势,尽量让中间点处于峰值;
2、如果中间点大于右边,则右边取代中间点
3、如果中间点小于或者等于右边,则峰值可能在中间点的右边一个或者在中间点的右边,尽可能的缩小左右包含中间点的范围
4、如果左右点相邻的最后情况,中间点肯定在左节点上,因为取模求出的中间点
5、当中和左重合的时候,如果发现中间的比右边大的时候,右边再靠拢,直到左边和右边的点重合,就推出返回左点
6、当中和左重合的时候,如果中间的比右边的小,那么左会往前再进一位,到达更高点。
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型
*/
public int findPeakElement (int[] nums) {
// write code here
int n = nums.length;
if (n == 1) {
return 0;
}
int left = 0, right = n - 1;
while (left < right) {
int mid = (left + right) >> 1;
if (nums[mid] > nums[mid + 1]) {
right = mid;
} else {
left = mid + 1;
}
}
return left;
}
}
查看17道真题和解析