局部极小值

一个给定的不包含相同元素的整数数组,每个,局部极小值的定义是一个值比左右相邻的(如果存在)都小的值,求它的一个局部最小值

遍历数组 O(n)时间复杂度。
二分查找 O(logn)时间复杂度:
数组范围是 [0,n-1],因此假想在下标-1和n处有两个取值为无穷大的哨兵。

mid = (x + y) / 2,二分,两个子数组a[x..mid], a[mid + 1..y]

若a[mid] < a[mid + 1], 则子数组a[x..mid]满足a[x] < a[x - 1], a[mid] < a[mid + 1]

反之a[mid] > a[mid + 1], 则子数组a[mid + 1..y]满足a[mid + 1] < a[mid], a[y] < a[y + 1]

实现:

int findLocalMax(const vector<int> &v)
{
    int lo = 0,hi = v.size()-1;
    while(lo<hi)
    {
        int mid = (lo+hi)>>1;//由于整数除法 其实是向下取整
        if(v[mid]>v[mid+1]){
            lo = mid+1;
        }else{
            hi = mid;
        }
    }
    return lo; //跳出循环 lo 一定等于 hi
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,775评论 0 33
  • 一、实验目的 学习使用 weka 中的常用分类器,完成数据分类任务。 二、实验内容 了解 weka 中 explo...
    yigoh阅读 8,638评论 5 4
  • 归去来兮。 1.1 说明 本篇为《挑战程序设计竞赛(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy阅读 14,455评论 0 160
  • 20170304 今天我儿子要去看牙向我要公交卡,他的没有钱了,他有钱不去充值。我不愿意借公交卡给他,我儿子立马暴...
    慧儿妈阅读 153评论 0 0
  • 在网吧 我度过一个寒冷的冬天 心情从这里开始乱了起来 也在这里归于平静 在网吧 我躲藏人世好多夜里的烦恼 ...
    漠中阅读 176评论 0 0