首页 > 其他分享 >力扣---33. 搜索旋转排序数组

力扣---33. 搜索旋转排序数组

时间:2023-02-28 15:33:19浏览次数:38  
标签:力扣 p1 target nums 33 示例 --- int 数组

整数数组 nums 按升序排列,数组中的值 互不相同 。
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。
你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例 1:
输入:nums = [4,5,6,7,0,1,2], target = 0
输出:4

示例 2:
输入:nums = [4,5,6,7,0,1,2], target = 3
输出:-1

示例 3:
输入:nums = [1], target = 0
输出:-1

提示:
    1 <= nums.length <= 5000
    -104 <= nums[i] <= 104
    nums 中的每个值都 独一无二
    题目数据保证 nums 在预先未知的某个下标上进行了旋转
    -104 <= target <= 104
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/search-in-rotated-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


 

class Solution {
    public int search(int[] nums, int target) {
        int p1 = 0;
        int p2 = nums.length - 1;
        int p;
        while (p1 <= p2) {
            p = (p1 + p2) / 2;
            if (nums[p] == target) {
                return p;
            }
//             根据p, p1的关系判断p处于什么区间,例如{4, 5, 6, 7, 0, 1, 2} 中,第一次判断时,p = 7,在4, 5, 6, 7的区间,即翻转后的左边。
            if (nums[p] >= nums[p1]) {
//                 再判断 target 是在 p 的左边还是右边,从而调整左右边界 p1 和 p2
//                {4, 5, 6, 7, 0, 1, 2} 中,target是0,不在{4, 5, 6, 7区间,即在右边。
                if (target >= nums[p1] && target < nums[p]) {
                    p2 = p - 1;
                } else {
                    p1 = p + 1;
                }
            } else {
                if (target > nums[p] && target <= nums[p2]) {
                    p1 = p + 1;
                } else {
                    p2 = p - 1;
                }
            }
        }
        return -1;
    }
}

标签:力扣,p1,target,nums,33,示例,---,int,数组
From: https://www.cnblogs.com/allWu/p/17164458.html

相关文章

  • Java并发编程学习15-任务关闭(下)
    任务关闭(下)《任务关闭》由于篇幅较多,拆分了两篇来介绍各种任务和服务的关闭机制,以及如何编写任务和服务,使它们能够优雅地处理关闭。1.处理非正常的线程终止我们知道,当......
  • 剑指 Offer 55 - II. 平衡二叉树(java解题)
    目录1.题目2.解题思路3.数据类型功能函数总结4.java代码1.题目输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超......
  • 「CF1336E」Chiori and Doll Picking
    题目点这里看题目。给定一个长度为\(n\)的非负整数序列\(a\)和非负整数参数\(m\),保证\(\forall1\lei\len,0\lea_i<2^m\)。设\(U=\{1,2,3,\dots,n-1,n\}\)。......
  • 【必看】RuoYiVuek框架-数据源动态新增、配置如此简单!
    应用场景系统用户只能访问系统配置的数据源(可动态新增修改的)RuoYiVue框架源码点我跳转实现方式1.系统提供Yml文件配置+Druid加载数据源+@DataSource注解+D......
  • ABP微服务系列学习-搭建自己的微服务结构(一)
    在原本的结构里面,由于默认服务引用的都是ABP原生的模块,所以结构目录里面没有包含modules目录,这里我们添加一个modules目录,用于存放我们的自定义模块。在shared里面,我们再抽......
  • node安装node-sass
    安装node-sass使用node版本不能太高,否则会报错checkingforPythonexecutable"C:\ProgramFiles\python"inthePATH下载cnpm:npminstallcnpm-g--registry=htt......
  • ABP微服务系列学习-搭建自己的微服务结构(二)
    在解决方案根目录添加common.props,这个文件的作用是可以配置项目文件全局的一些属性,如忽略警告,全局PackageReference,语言版本等。<Project><PropertyGroup><LangV......
  • Pig nacos 不支持 moxm/java:1.8-full 缺少 so 问题
    使用如下Dockerfile构建镜像#catDockerfileFROMmoxm/java:1.8-fullasbuilderWORKDIR/buildARGJAR_FILE=target/pig-register.jarCOPY${JAR_FILE}app.jarRU......
  • SSM框架-MyBatis学习日记5
    使用limit实现分页在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查询操作,如果查询大量数据的时候,我们往往使用分页进行查询,也就......
  • 内存不足时Linux 内核自动触发OOM-killer
    问题产生:作者最近在搭建Hadoop+Hive集群时,将NameNode、DataNode、Rm全部部署到一台物理机上,查询量较大时连接挂掉。问题定位:使用JPS命令查看Metastore服务正常运行,hive2......