这里其实看作是寻找最大值,因为最大值一定是峰值。
如果使用二分查找法,就是查找最大值的过程。
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return int整型 */ public int findPeakElement (int[] nums) { // write code here // 最直观的方法,就是直接遍历一遍就好,先试试 if (nums.length == 1) { return 0; } if (nums.length == 2) { return nums[0] > nums[1] ? 0 : 1; } /* int res = -1; for (int i = 1; i < nums.length - 1; ++i) { if (nums[i] > nums[i - 1] && nums[i] > nums[i + 1]) { res = i; break; } } if (res == -1) { if (nums[0] > nums[1]) { return 0; } else if (nums[nums.length - 1] > nums[nums.length - 2]) { return nums.length - 1; } } return res; */ // 尝试二分查找最大值 int res = -1, left = 0, right = nums.length - 1; while (left <= right) { int m = left + (right - left) / 2; System.out.println(m); if (m == nums.length - 1 || m == 0) { res = m; break; } if (nums[m] < nums[m - 1]) { right = m - 1; } else if (nums[m] < nums[m + 1]) { left = m + 1; } else { res = m; break; } } return res; } }