Search in rotated sorted Array

2023-11-11

算法框架和普通折半查找一样,主要变量就是begin, end, mid。考虑的区间也一样,都是[begin,mid), [mid], (mid,end]这三种情况,只是判断条件的部分不同。

1)若target==A[mid] 返回mid.

2)之后只有两种情况:target 要么落在[begin,mid) 要么落在(mid,end],只是判断条件和普通折半查找有所不同。这两个区间一个是纯单调区间,一个是混合区间。一个数x是否落在一个纯区间(a,b)的判断条件很简单,就是 a<x<b,所以优先判断这种情况,另一种情况放在else里。纯区间是哪个要分mid落在前半部分(A[begin]<A[mid])还是后半部分:

  mid在前半部分:纯区间是[being,mid),target落在这个区间的条件是 A[begin]<=target<A[mid] ,否则落在(mid,end].

  mid在后半部分:纯区间是(mid,end],target落在这个区间的条件是 A[mid]<target<=A[end], 否则落在[begin,mid).


如何判断mid落在哪个部分?如果A[mid]>A[begin],可以确定mid落在前半部分,如果A[mid]<A[begin] 可以确定mid落在后半部分。当A[mid]==A[begin]无法确定,这时候只需要begin++,排除当前begin往下看,因为A[mid]也等于这个值,这个值不会丢,所以不影响结果。

bool search(int A[], int n, int target) {
        int i=0,j=n-1;
        while(i<=j)
        {
            int mid= (i+j)/2;
            if(A[mid]==target)
                return true;
            if(A[i]==A[mid]) //if A[i] == A[mid], skip A[i], since the value still in the remaining interval
                i++;
            else if(A[i]<A[mid])
            {
                if(target<A[mid] && target>=A[i])
                    j=mid-1;
                else
                    i=mid+1;
            }
            else
            {
                if(target>A[mid] && target<=A[j])
                    i=mid+1;
                else
                    j=mid-1;
            }
        }
        return false;
    }


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Search in rotated sorted Array 的相关文章

随机推荐

  • 国庆假期将至,拓世AI智能规划行程,让您轻松游遍全球热门景点!

    卡夫卡曾说 人不是活几年 几月 几天 几小时 而只活几个瞬间 亲赴一场与美景的邂逅 便是去找寻人生里的瞬间之美 转眼已是九月 正是人间好时节 挥别工作和生活的烦闷 奔向辽阔的天地中 即将到来的国庆长假 你需要来一场说走就走的旅行 将所有烦恼
  • 动态数据源配置druid+mybatis

    本方案不限数据库数量完全动态配置 支持不同的数据库部署在不同的服务器上 mybatis plus没测试 下个版本用oracle配的时候尝试plus 一 这次我们使用Mysql 本地现在有两个个数据库用于测试 如图 二 下一步我们看一下Dru
  • LintCode入门题目

    37 反转一个3位整数 反转一个只有3位数的整数 样例 样例 1 输入 number 123 输出 321 样例 2 输入 number 900 输出 9 注意事项 你可以假设输入一定是一个只有三位数的整数 这个整数大于等于100 小于10
  • 表空间的操作

    1 创建表空间 create tablespace tablespace name datafile filepath size filesize autoextend on next autosize maxsize filemaxsiz
  • rule34服务器不稳定,rule34网站

    rule34网站 内容精选 换一换 网站后台数据录入完成后 您需要为您的网站设置便于客户浏览和操作的前台显示界面 本章节主要通过已安装的网站模板指导您完成PC版 手机版网页的制作 以及网站数据的备份 已完成网站后台的设置 并且成功绑定域名
  • 用PyCharm打开已有代码

    一 代码的打开 1 在当前环境 打开新的项目 2 点open 打开文件存放的位置 3 trust Project 4 this window or new window 一般选this window 5 解决代码中的问题 1 一定要解决 2
  • python3 scrapy爬取微信公众号及历史信息V1.0

    环境 python3 scrapy 目的 写这篇文章主要是做一下纪念 毕竟是搞了快两天的东西了 今天加大了量 使用scrapy爬取100多个微信公众号 然后出现IP被封的情况下 当然了 这种情况并不是没有办法解决 只需要在scrapy中进行
  • Java SE学习笔记(五)——数组

    1 包装类 Wrapper Class 针对原生数据类型的包装 所有的包装类 8个 都位于java lang包下 对应8个包装类分别是 Byte Short Integer Long Float Double Character Boole
  • 如何设计一个“正确”的后端接口

    一个后端接口正常情况下会包含 接口地址url 接口的请求方式 get post 请求数据 相应数据 在此记录一下如何构建一个完整的后端接口的过程 无论一个简单还是复杂的接口 无论是对外开放的接口还是http接口 参数校验是比不可少的 因为调
  • 做web开发,怎么能不懂cookie、session和token呢?

    如果把人体比作一个web系统的话 cookie session和token就好像人体的经络和血管一样 而web系统中的数据 就好像人体的血液一样 血液依靠着血管在人体内流动 就如数据根据cookie和session机制在web系统中流动一样
  • 活动报名

    活动议程 日期 8月11日 周五 时间 主题 14 30 14 35 开场简介 吴琦 阿德莱德大学副教授 青源会会员 14 35 15 20 实际应用中的通用视觉与语言方法 聚焦于视觉与语言导航任务 乔滟媛 阿德莱德大学博士后研究员 15
  • vue_02_数据绑定

    1 单向数据绑定 语法 v bind href xxx 或简写为 href 特点 数据只能从 data 流向页面
  • 大乐透分析软件

    大乐透分析软件 1 使用python从网站中爬取所有的大乐透中奖号码 2 使用c 分析红球 蓝球 组合重复出现次数 3 输入红球 蓝球判断历史中奖次数和出现次数 python爬取代码 import os import re import t
  • 【OpenCV图像处理】1.26 直方图反向投影(Back Projection)

    1 相关理论 反向投影 反向投影是反映直方图模型在目标图像中的分布情况 简单点说就是用直方图模型去目标图像中寻找是否有相似的对象 通常用HSV色彩空间的HS两个通道直方图模型 反向投影 步骤 1 建立直方图模型 2 计算待测图像直方图并映射
  • 【SqlServer】如何实现用一个表中的数据修改另一个表中的数据?

    问 我想根据一定的条件实现用一个表中的数据修改另一个表中的数据 这该如何办到呢 答 这有何难 用SQL语言UPDATE嘛 表一 student stu id stu name stu age 1 aa 20 2 bb 21 3 cc 22
  • 小程序跳转外链

    注意 个人类型和海外类型的小程序不支持 web view 标签 直接跳转显示如下页面 解决方案1 将外链地址配置在微信公众的白名单中即可正常跳转 解决方案2 新建一个 fbec number collection用web view承载它以后
  • Oracle-Rman详解

    RMAN 使用详解 一 连接方式 一 连接本地数据库 oracle oracle rman target 二 连接远程数据库 oracle oracle rman target sys oracle orcl 二 基本指令 一 执行 SQL
  • Java线程(从基本概念到线程安全,超详细加大量代码实现)

    线程 线程基本概念 一个线程是一个程序内部的顺序控制流 线程和进程 每个进程都有独立的代码和数据空间 进程上下文 进程切换的开销大 线程 轻量的线程 同一类线程共享和数据空间 每个线程有独立的运行栈和程序计数器 PC 线程切换的开销小 多进
  • 计算机视觉(三):神经网络最优化过程

    计算机视觉笔记总目录 1 最优化 Optimization 定义 最优化是寻找能使得损失函数值最小化的参数 W W W的过程 注 给的是损失优化问题的一个简单定义 并不是完整的最优化数学定义 方法 问题陈述 这节的核心问题是 给定函数 f
  • Search in rotated sorted Array

    算法框架和普通折半查找一样 主要变量就是begin end mid 考虑的区间也一样 都是 begin mid mid mid end 这三种情况 只是判断条件的部分不同 1 若target A mid 返回mid 2 之后只有两种情况 t