c_cpp FindAPeakElement,二分查找

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp FindAPeakElement,二分查找相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;

int findPeakElement(vector<int>& nums) {
    if(nums.size()==0){
        return -1;
    }
    int l=0,r=nums.size()-1;
    int ans;
    while(l<=r){
        if(l==r){
            ans= l; // if single element
            break;
        }
        int m=l+(r-l)/2;
        if(m==0){
            if(nums[m]>=nums[m+1]){ // if at left border
                return m;
            }
        }
        if(m==nums.size()-1){
            if(nums[m]>=nums[m-1]){ // if at right border
                return m;
            }
        }
        if(nums[m]>nums[m+1] && nums[m]>nums[m-1]){ // if current mid is peak element
            return m;
        }
        if(m>0 && nums[m-1]>nums[m]){
            r=m-1;  // if there is a greater element to left then there's definitely a peak to the left
        }else if(m<nums.size()-1 && nums[m+1]>nums[m]){
            l=m+1;
        }
    }
    return ans;
}

以上是关于c_cpp FindAPeakElement,二分查找的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp FindKClosestElements,二分查找

c_cpp SearchInRange,二分查找

c_cpp 二分检查

c_cpp 平方根,二分查找

c_cpp 【分治法】二分搜索技术【2.3】

c_cpp 二分搜索是所有以比较为基础的搜索算法时间复杂度最低的算法。用二叉树描速二分查找算法,最坏情况下与二叉树的最高阶相同。比较二叉树线性查找也可用二叉树表示,最坏情况下比较次数为数组元素数量。任