首页 > 其他分享 >Leetcode 33 -- 二分查找&&归约思想

Leetcode 33 -- 二分查找&&归约思想

时间:2022-10-11 11:13:38浏览次数:73  
标签:int target nums 33 mid -- 归约 查找 数组

题目描述

搜索旋转排序数组

思路

思路来源
一个清晰的思路:这道题和平常二分法查找的不同就在于,把一个有序递增的数组分成了,两个递增的数组,我们需要做的就是判断这个数在哪一个递增的数组中,然后再去用常规的二分法去解决

代码1

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int n = nums.size();
        int l = 0, r = n - 1;
        while(l < r)
        {
            int mid = l + r >> 1;
            if(nums[0] <= nums[mid] && nums[0] <= target && target <= nums[mid])
            {
                r = mid;
            }
            else if(nums[mid] < nums[0] && target <= nums[mid])
            {
                r = mid;
            }
            else if(nums[mid] < nums[0] && nums[0] <= target)
            {
                r = mid;
            }
            else 
            {
                l = mid + 1;
            }
        }
        return nums[l] == target ? l : -1;
    }
};

位运算优化版

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int n = nums.size();
        int l = 0, r = n - 1;
        while(l < r)
        {
            int mid = l + r >> 1;
            if ((nums[0] > target) ^ (nums[0] > nums[mid]) ^ (target > nums[mid]))
            {
                l = mid + 1;
            }
            else 
            {
                r = mid;
            }
        }
        return nums[l] == target ? l : -1;
    }
};

标签:int,target,nums,33,mid,--,归约,查找,数组
From: https://www.cnblogs.com/ALaterStart/p/16778540.html

相关文章

  • tcpdump 简单使用
    语法解析tcpdump-vvnn-c10-s0-ieth0“tcpdump原语表达式”-vvnn:显示ip地址而不是主机名-c:抓包次数-s:抓包大小,大于这个值的包内容会被截断,0表示不限制大小,显示全......
  • 第二十五章 软件开发的目录规范
    一、基本概述为了提高程序的可读性与可维护性,我们应该为软件设计良好的目录结构,这与规范的编码风格同等重要。软件的目录规范并无硬性标准,只要清晰可读即可,假设你的软件名......
  • Solution Set -「NOIP Simu.」20221011
    「Unknown」找  给出平面上\(n\)个点,对于每个点,求出它到其他点的欧式距离平方和.  \(n\le2\times10^5\).  Tag:「水题无tag」  画风正常的签到题.\(d......
  • 实现ls-myls
    ls简介用manls命令查看ls的具体功能可以看出ls的功能是列出关于文件的信息。添加不同的后缀,可以以不同的形式输出-a:显示所有档案及目录(ls内定将档案名或目录名称......
  • docker常用命令
    启动docker服务:systemctlstartdocker停止docker服务:systemctlstopdocker重启docker服务:systemctlrestartdocker查看docker服务状态:systemctlstatusdocker......
  • StoneDB主从切换实践方案
    StoneDB的主从切换既可以手动切换,也可以自动切换,自动切换通常需要使用第三方中间件。本文介绍的是较为常用的中间件ReplicationManager,当master发生宕机时,可自动切换......
  • Python文件和目录操作
    创建目录1、os.makedirs可以递归的创建目录结构例如:importosos.makedirs('路径(可以是相对路径也可以是绝对路径)',exist_ok=True)exist_ok=True指定了,如果某个要......
  • Java 中初始化 List 的五种方法
    1、构造List后使用List.add初始化1List<String>stringList=newLinkedList<>();2stringList.add("a");3stringList.add("b");4stringList.add("c");这是......
  • Hello,World!
    JDK,JRE,JVMJDK:JavaDevelopmentKit(Java所有的东西)JRE:JavaRuntimeEnvironment(Java运行的环境)JVM:JavaVitrualMachine(Java虚拟机)卸载JDK1.删除Java......
  • 记录一次oracle数据迁移
    背景:要把系统再部署一套,现在系统考虑用原来系统的(基础)数据。所以需要把原来的数据导出,放到新系统数据库中。 操作:--[1.1]登陆原系统sqlplus/assysdba--[1.2]查......