题目描述:一 个数组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 }

转载于:https://www.cnblogs.com/cane/p/3944247.html

九章算法--寻找数组波峰相关推荐

  1. 多个数字数组_九章算法 | 谷歌面试题:多个数组的交集

    给出多个数组,求它们的交集.输出他们交集的大小. 在线评测地址:LintCode 领扣 样例 1: 输入: [[1,2,3],[3,4,5],[3,9,10]]输出: 1解释:只有3出现在三个数组中. ...

  2. arrays合并两个数组_九章算法 | 字节跳动面试题:合并k个排序数组

    将 k 个有序数组合并为一个大的有序数组. 在线评测地址:LintCode 领扣 样例 1: Input: [[1, 3, 5, 7],[2, 4, 6],[0, 8, 9, 10, 11]] Out ...

  3. 九章算法高频算法题 题解

    专栏 | 九章算法 网址 | http://www.jiuzhang.com Google 面试题: Google 面试题 | 目标和 Google 面试题 | 建邮局 Google 面试题 | 0与 ...

  4. 分治习题--九章算法培训课第三章笔记

    1.Maximum Depth of Binary Tree 这是道简单的分治习题了 分: 左子树最大深度 右子树最大深度 治: 最大深度等于max(左子树,右子树)+1 public class S ...

  5. 动态规划法求最大字段和时间复杂度_九章算法 | 动态规划:最长上升子序列

    给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度. 在线评测地址:LintCode 领扣 说明 最长上升子序列的定义: 最长上升子序列问题是在一个无序的给定序列中找到一个尽可能长的由低 ...

  6. 编号是i的结点所在的层次号是_九章算法 | 微软面试题:二叉树的锯齿形层次遍历...

    给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 在线评测地址:LintCode 领扣 样例 1: 输入:{1,2,3} 输出:[[1],[3,2]] ...

  7. n皇后问题c语言_九章算法 | N皇后问题

    n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(任意两个皇后不能位于同一行,同一列,同一斜线). 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的 ...

  8. 八皇后时间复杂度_九章算法 | N皇后问题

    n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(任意两个皇后不能位于同一行,同一列,同一斜线). 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的 ...

  9. 九章算法笔记 - 思路总结

    上九章算法课的笔记,之前记在笔记本上,现在扫描出来便于保存,每次面试之前看着这个笔记过一遍,心里有谱一些. 目录: 1.二分搜索 Binary search 2.二叉树与分治法 3.宽度优先搜索 BF ...

最新文章

  1. python 自动生成C++代码 (代码生成器)
  2. 题目 1470:【蓝桥杯】【入门题】【基础练习VIP】时间转换
  3. 配置apache服务器的文件名,apache服务器配置文件名是
  4. C#类型转换 (非原创)
  5. 【详细讲解】某书店有一个收银员该书店最多允许n个购书者进入。将收银员和购书者看作不同的进程,其工作流程如下图所示。利用PV操作实现该过程,设置信号量S1,S2和Sn,初值分别为0,0,n.则图中a1
  6. Windows Phone 8本地化多语言支持
  7. textview 结束后释放_等待按键释放,你的代码如何写?
  8. 开源运维管理软件排名_车主无忧:为什么放弃开源Kafka?
  9. hive数据的导入导出方式
  10. Linux shell脚本详解及实战(五)——shell脚本函数
  11. type与instance区别
  12. c++ const 修饰变量位置含义
  13. svn server 搭建
  14. 【ACwing】一、基础算法:1.1 递归枚举(指数型)
  15. 关于Docker时的权限问题解决dial unix /var/run/docker.sock: connect: `permission denied`
  16. python网易公开课官网_可汗学院公开课:计算机科学
  17. coreldraw快速撤回_CorelDRAW基础教程,教你CDR X8撤销、重做与重复操作方法
  18. Spring Security 小记 - @Secured(), @PreAuthorize() 及 @RolesAllowed()
  19. 计算机中容量单位B、KB、MB、GB和TB的关系
  20. vue element 父传子,第一次传不过去

热门文章

  1. K8S 使用 SideCar 模式部署 Filebeat 收集容器日志
  2. java vk减号_Vue入门经常使用指令
  3. linux后台执行shell脚本
  4. dist文件夹、src文件夹、dest文件夹作用
  5. 【初赛】「程序填空」题答v1.0
  6. 【POJ3461】Oulipo(字符串Hash)
  7. java推送微信消息换行_5行代码实现微信小程序模版消息推送 (含推送后台和小程序源码)...
  8. upper_bound( )和lower_bound()的用法
  9. 人群与网络:新事物在网络中的扩散
  10. 倍增LCA(bzoj 3732: Network)