题解 | #寻找牛群中的最高牛#
寻找牛群中的最高牛
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;
}
};

