题解 | #寻找牛群中的最高牛#
寻找牛群中的最高牛
https://www.nowcoder.com/practice/df826dd3f9304c61bb6e13fcf16652c3
考察的知识点:二分查找;
解答方法分析:
- 定义左边界变量
left
为数组的起始索引 0,右边界变量right
为数组的末尾索引heights.length - 1
。 - 在循环中,计算中间索引
mid
,并将该索引的值与其相邻的右边元素mid + 1
进行比较。 - 如果
heights[mid] > heights[mid + 1]
,说明峰值一定在当前mid
的左侧,因此将右边界right
更新为mid
。 - 否则,说明峰值一定在当前
mid
的右侧,因此将左边界left
更新为mid + 1
。 - 循环继续,直到
left
不再小于right
。 - 最后返回左边界
left
,即为峰值的位置。
所用编程语言:C++;
完整编程代码:↓
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param heights int整型vector * @return int整型 */ int findPeakElement(vector<int>& heights) { int left = 0, right = heights.size() - 1; while (left < right) { int mid = left + (right - left) / 2; if (heights[mid] > heights[mid + 1]) { right = mid; } else { left = mid + 1; } } return left; } };