题解 | 寻找峰值
寻找峰值
https://www.nowcoder.com/practice/fcf87540c4f347bcb4cf720b5b350c76
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @param numsLen int nums数组长度 * @return int整型 */ int findPeakElement(int* nums, int numsLen ) { // write code here if (numsLen == 1) return 0; int left = -1, right = numsLen; while (left + 1 != right) { int mid = (left + right) >> 1; if (nums[mid] < nums[mid + 1]) left = mid; else right = mid; if (mid == 0) { if (nums[0] > nums[1]) return 0; } else if (mid == numsLen - 1) { if (nums[mid] > nums[mid - 1]) return mid; } } if (nums[right] > nums[right + 1]) return right; return 0; }
这道二分比较有意思。平常的二分规定都是在有序数组中使用,但是呢,这个偏偏是不能排序的。如果不是这道题标了个二分,还真不一定能想出来用二分做。而知道是用二分之后,我们知道二分的本质就是要处理好边界条件,所以可以具体分析就好了。#牛客春招刷题训练营#
#牛客春招刷题训练营#