题目

思路

如果常规解法不考虑时间复杂度,直接遍历即可得到峰值,时间复杂度为O(n),题目要求O(logn),因此我们需要使用二分法。

首先考虑题目要求:nums[-1]=nums[n]=-∞,因此在数组开始必然存在一个上坡,在结尾必然存在一个下坡。

这里给一个例子:[1,3,2,0],这里按照二分法一开始mid选的值为3,我们发现3大于2,因此有了一个下坡,而数组一开始又有一个上坡,这样说的话,只要往数组前半部分寻找,如果找到比3大的数,那么必然有一个峰值(因为有一个上坡,又有一个下坡),如果找到比3小的数,那么肯定也能有一个峰值,反之肯定也能找到一个峰值,如果不理解的话自己列一个例子去一步一步试试就知道了。

代码

int findPeakElement(const vector<int> &num) {
int start = 0,end=num.size()-1;
int mid = start + (end - start) / 2;
while(start <= end)
{
//找完了
if(start == end) return start;
mid = start + (end - start) / 2;
//往后面寻找
if(num[mid] < num[mid+1])
{
start = mid + 1;
}//往前面寻找
else
{
end = mid;
}
}
return 0;
}

最新文章

  1. 从配置读取一段时间(TimeSpan)
  2. input固定在底部
  3. map[C++]
  4. div box container随主体内容自动扩展适应的实现
  5. 【原】java环境变量配置&amp;&amp; jdk配置 &amp;&amp; 各配置的意义
  6. [word]2010中插入公式自动编号并且公式不自动缩小/变小
  7. Channel Allocation
  8. CentOS编译安装lamp
  9. 无限滚动 --demo
  10. 【html】【21】高级篇--搜索框
  11. 话说GET与POST那点恩怨
  12. SD-关于定价日期的设置
  13. Eclipse 优化方法(经典收藏)
  14. Perl 面向对象编程的两种实现和比较:
  15. Git分支使用心得
  16. 201521123107 《Java程序设计》第7周学习总结
  17. 浏览器缓存相关HTTP头部字段
  18. 纯前端导出pdf文件
  19. 转:浅谈SimpleDateFormat的线程安全问题
  20. Node.js机制及原理理解初步【转】

热门文章

  1. java.util.Arrays----操作数组的工具类
  2. 成功 解决 @keyup.enter=“search()“ 在el-input 组件中不生效的问题
  3. 服务器之Apollo单机部署(快速安装)
  4. 齐博x1云市场注意事项
  5. 7. url反向解析和静态文件
  6. uni-app 配置MuMu手机模拟器 (2022-2-24)
  7. k8s挂在问题
  8. Golang占位符
  9. 将Oracle数据库迁移到达梦数据库
  10. java学习之JSON