算法题19:寻找峰值
思路
只要不断地往高处走,一定会有波峰,可以每次找一个标杆元素,一般为区间中点,将数组分成两个区间,每次就较高的一边走。
代码
int findPeakElement(vector<int>& nums) {
// write code here
// // 分治递归法,总是往高处走
// return findPeak(nums, 0, nums.size()-1);
// 非递归法
int left = 0;
int right = nums.size()-1;
int middle;
while(left < right){
middle = (left + right)/2;
// 往左走
if(nums[middle] > nums[middle+1]){
right = middle; // 不能是middle-1
}
// 往右走
else{
left = middle + 1;
}
}
return left;
}