zoukankan      html  css  js  c++  java
  • 九章算法--寻找数组波峰

    题目描述:一 个数组A[1..n],假设数组中没有任何相邻两数相等,满足A[1]<A[2],A[n-1]>A[n]。A[i]被称为波峰,当且仅当 A[i]>A[i-1]并且A[i]>A[i+1]。请找到数组中的一个波峰。假设数组中存在相邻相等的数,该怎么做?

    二分法寻找一个波峰,

    如果数组存在相邻相等的元素则必须O(n)

     1 /*************************************************************************
     2     > File Name: ArrayWaveCrest.cpp
     3     > Author: zhoukang1991
     4     > Mail: zhoukang199191@126.com 
     5     > Created Time: 2014年08月29日 星期五 21时36分24秒
     6  ************************************************************************/
     7 
     8 #include <iostream>
     9 #include <vector>
    10 #include <climits>
    11 using namespace std;
    12 
    13 int findcrest(const vector<int> &arr){
    14     int left = 0;
    15     int right = arr.size()-1;
    16     int n = arr.size();
    17     while(left <= right){
    18         int mid = left + (right-left)>>1;
    19         if(mid == 0){
    20             left = 1;
    21             continue;
    22         }
    23         if(mid == n-1){
    24             right = n-2;
    25             continue;
    26         }
    27 
    28         if( arr[mid] > arr[mid-1] && arr[mid] > arr[mid+1]){
    29             return arr[mid];
    30         }
    31         else if(arr[mid] < arr[mid-1]){
    32             right = mid-1;
    33         }
    34         else{
    35             left = mid+1;
    36         }
    37     }
    38     return INT_MIN;
    39 }
    40 
    41 int main(){
    42     vector<int> v;
    43     v.push_back(1);
    44     v.push_back(2);
    45     v.push_back(3);
    46     v.push_back(2);
    47     v.push_back(1);
    48     cout<<findcrest(v)<<endl;
    49     return 0;
    50 }
  • 相关阅读:
    Go标准库之tar
    redis必知必会
    GORM CRUD指南
    GORM入门指南
    MUI中tap点击事件点击一次连续申请两次
    Go代码启动默认浏览器
    Go实现JWT
    Go Micro
    protobuf初识
    英语作文
  • 原文地址:https://www.cnblogs.com/cane/p/3944247.html
Copyright © 2011-2022 走看看