题解 | #寻找峰值#
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型 */ int findPeakElement(int* nums, int numsLen ) { // write code here int r = 0; int l = numsLen-1; int flag = nums[0]; // for(int i=1;i<numsLen-1; i++){ // if(nums[i]>nums[i-1] && nums[i]>nums[i+1]){ // return i; // } // } while(r<l){ int mid = (r+l)/2; if(nums[mid]>nums[mid+1]){ l = mid; } else{ r=mid+1; } } return r; }
可以使用数组顺序查找,但按照题目要求应该是二分查找。通过判断山势走向来判断目标在左边还是右边,如果山势向左升高则山峰在左边,反之在右边。在缩小范围是,应该保留潜在的最大峰值,即保留大的一方山峰。