[Leetcode]寻找峰值
2024-09-18 10:23:23
题目
思路
如果常规解法不考虑时间复杂度,直接遍历即可得到峰值,时间复杂度为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;
}
最新文章
- 从配置读取一段时间(TimeSpan)
- input固定在底部
- map[C++]
- div box container随主体内容自动扩展适应的实现
- 【原】java环境变量配置&;&; jdk配置 &;&; 各配置的意义
- [word]2010中插入公式自动编号并且公式不自动缩小/变小
- Channel Allocation
- CentOS编译安装lamp
- 无限滚动 --demo
- 【html】【21】高级篇--搜索框
- 话说GET与POST那点恩怨
- SD-关于定价日期的设置
- Eclipse 优化方法(经典收藏)
- Perl 面向对象编程的两种实现和比较:
- Git分支使用心得
- 201521123107 《Java程序设计》第7周学习总结
- 浏览器缓存相关HTTP头部字段
- 纯前端导出pdf文件
- 转:浅谈SimpleDateFormat的线程安全问题
- Node.js机制及原理理解初步【转】
热门文章
- java.util.Arrays----操作数组的工具类
- 成功 解决 @keyup.enter=“search()“ 在el-input 组件中不生效的问题
- 服务器之Apollo单机部署(快速安装)
- 齐博x1云市场注意事项
- 7. url反向解析和静态文件
- uni-app 配置MuMu手机模拟器 (2022-2-24)
- k8s挂在问题
- Golang占位符
- 将Oracle数据库迁移到达梦数据库
- java学习之JSON