当前位置:网站首页>81.搜索旋转排序数组II(数组旋转后二分查找)
81.搜索旋转排序数组II(数组旋转后二分查找)
2022-07-30 05:38:00 【Linke66】
记录一下:
if(nums[left]==nums[mid]){
//无法判断哪个区间是升序的
++left;
}
假如是上面这种情况,反正是寻找有无target,两个元素相等,直接让left往右移动一个,直到能够判断左边还是右边是升序!
class Solution {
public:
bool search(vector<int>& nums, int target) {
int left=0,right=nums.size()-1;
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target){
return true;
}
if(nums[left]==nums[mid]){
//无法判断哪个区间是升序的
++left;
}else if(nums[mid]<=nums[right]){
//右区间是升序的
if(target>nums[mid]&&target<=nums[right]){
left=mid+1;
}else{
right=mid-1;
}
}else
{
//左区间是升序的
if(target<nums[mid]&&target>=nums[left]){
right=mid-1;
}else{
left=mid+1;
}
}
}
return false;
}
};
特别注意相等的时候,
不能随意忽略左界或右界,因为无法确定左界升序还是右界升序,因此只能忽略一个元素,即right=right-1;
class Solution {
public:
int findMin(vector<int>& nums) {
int left=0,right=nums.size()-1;
while(left<right)
{
int mid=left+(right-left)/2;
if(nums[mid]<nums[right]){
//更新右界,最小元素不可能在mid右边,mid可能是最小的元素
right=mid;
}else if(nums[mid]>nums[right]){
//更新左界,最小元素一定在mid右边
left=mid+1;
}else{
//不能随意忽略任一部分,但是可以忽略右端点
//因为是跟右界比的,既然相等就忽略右端点
right-=1;
}
}
return nums[left];
}
};
边栏推荐
- What is SOA (Service Oriented Architecture)?
- 分布式事务之 Atomikos 原理和使用(一)
- 腾讯面试居然跟我扯了半小时的CountDownLatch
- 2022年比若依更香的开源项目
- [Mysql] DATEDIFF函数
- It is enough for MySQL to have this article (37k words, just like Bojun!!!)
- Introduction to Oracle Patch System and Opatch Tool
- 4、nerf(pytorch)
- 安装Nuxt.js时出现错误:TypeError:Cannot read property ‘eslint‘ of undefined
- G Bus Count (Google Kickstart2014 Round D Problem B) (DAY 89)
猜你喜欢
微积分 / 自动求导
St. Regis Takeaway Project: New dishes and dishes paged query
MySQL的存储过程
Memories · The last system design in the university era
MySQL (2)
个人博客系统(附源码)
解决没有配置本地nacos但是一直发生localhost8848连接异常的问题
Different lower_case_table_names settings for server ('1') and data dictionary ('0') solution
安装pytorch
JVM之GC 调优工具 Arthas 实战使用(二)
随机推荐
SRA数据下载方法总结
It's time to have to learn English, give yourself multiple paths
PyCharm usage tutorial (more detailed, picture + text)
腾讯面试居然跟我扯了半小时的CountDownLatch
4461. 范围分区(Google Kickstart2022 Round C Problem B)
倒计数(来源:Google Kickstart2020 Round C Problem A)(DAY 88)
手把手教你设计一个CSDN系统
Different usage scenarios of subqueries as retrieval tables and the question of whether to add aliases
从底层结构开始学习FPGA(6)----分布式RAM(DRAM,Distributed RAM)
MySQL fuzzy query performance optimization
报错:npm ERR code EPERM
839. Simulated heap
排列数字(DAY90)dfs
navicat连接MySQL报错:1045 - Access denied for user ‘root‘@‘localhost‘ (using password YES)
Basic syntax of MySQL DDL and DML and DQL
create-nuxt-app创建出来的项目没有server
MySql模糊查询大全
MySQL (2)
Seata exception: endpoint format should like ip:port
最新版MySQL 8.0 的下载与安装(详细教程)