当前位置:网站首页>【21天学习挑战赛】二分查找题目之寻找峰值
【21天学习挑战赛】二分查找题目之寻找峰值
2022-08-09 02:55:00 【小卢要刷力扣题】
活动地址:CSDN21天学习挑战赛
162. 寻找峰值
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。
你可以假设 nums[-1] = nums[n] = -∞ 。
你必须实现时间复杂度为 O(log n) 的算法来解决此问题。
示例 1:
输入:nums = [1,2,3,1]
输出:2
解释:3 是峰值元素,你的函数应该返回其索引 2。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/find-peak-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
顺序查找
直接从第1个元素找到最后一个元素,nums[i-1]<nums[i]>nums[i+1],即为峰值
class Solution {
public int findPeakElement(int[] nums) {
int n=nums.length;
if(n<2){
return 0;
}
if(nums[0]>nums[1]){
return 0;
}
if(nums[n-1]>nums[n-2]){
return n-1;
}
for(int i=1;i<n-1;i++){
if(nums[i]>nums[i-1]&&nums[i]>nums[i+1]){
return i;
}
}
return -1;
}
}
时间复杂度
因为最差情况是找到尾部,因此时间复杂度为O(n2)
这种解题方法不行,必须要用二分查找才能符合题意
二分查找
我们都知道二分查找的条件是数组要有序
这个数组并非有序,那么我们是否不能用二分查找呢
数组有序只是二分查找的一个充分非必要条件
并非有序数组才能二分
只要这个数组存在某种规律,能让数组分成两部分,并且只用在其中的一部分查找
在这一题中,我们发现峰值左右两边的数必定比峰值小
那么我们是否可以用这个规律来定义二分的规则呢
如果中间的数大于右边的数,那么峰值必定在左边,
反之,就在右边
class Solution {
public int findPeakElement(int[] nums) {
int l=0,r=nums.length-1;
while(l<r){
int m=l+(r-l)/2;
if(nums[m]>nums[m+1]){
r=m;
}else{
l=m+1;
}
}
return l;
}
}
边栏推荐
猜你喜欢
Inheritance
7月更新速递 | 产品实验室N+1,EasyV For Unreal上线!
OpenLORIS-Object Datasets
目标检测中mAP计算以及源码解析
开发工程师必备————【Day05】UDP协议;进程的并发与并行
Chapter3 numpy创建数组
数字 07 verilog仿真实例
VSCode使用总结
多态 polymorphism
What are the most popular automated testing tools in 2022?The most complete and most detailed of the entire network is here
随机推荐
全文翻译:Multimodal Neural Networks: RGB-D for Segmantic Segmentation and Object Detection
Pytest+request+Allure实现接口自动化框架
What are the most popular automated testing tools in 2022?The most complete and most detailed of the entire network is here
20220530设计问题:常数时间插入、删除和获取随机元素
[TensorRT] 对UNet进行推理加速
机器学习入门
MySQL相关知识 和 数据的存储相关知识
SwiftUI * Grid
数字 05 verilog&vivado2018.2零散笔记
【元胞自动机】基于元胞自动机模拟社会力因素下的灾害人员疏散应急仿真附matlab代码
渗透测试-域环境下的信息收集
SA-SSD环境搭建——血与泪的教训
Likou Brush Question Record 4.1-----209. The sub-array with the smallest length
“蔚来杯“2022牛客暑期多校训练营7,签到题CFGJ
ros入门(安装)
opencv在图像上长按左键画矩形单击右键清除
科大讯飞笔试题复盘
搭建Eureka注册中心集群 ,实现负载均衡
并查集相关知识点
20220523搜索和排序:搜索旋转排序数组