当前位置: 首页 > article >正文

2025年- H63-Lc171--33.搜索旋转排序数组(2次二分查找,需二刷)--Java版

1.题目描述

在这里插入图片描述

2.思路

输入:旋转后的数组 nums,和一个整数 target

输出:target 在 nums 中的下标,如果不存在,返回 -1

限制:时间复杂度为 O(log n),所以不能用遍历,必须使用 二分查找!
在这里插入图片描述
二分查找:搜索区间必须是“单调有序”的(即 单调递增 或 单调递减)。
(1)首先翻转后的数组,构成两个有序数组。
(2)对第一个有序数组进行二分查找
(3)对第二个有序数组进行二分查找
在这里插入图片描述

3.代码实现

  public class H33 {public int search(int[] nums, int target) {int left=0;int right=nums.length-1;//对于空数组直接返回-1if(nums==null||nums.length==0){return -1;}while(left<=right){int mid=left+(right-left)/2;//1.直接找到目标返回if(nums[mid]==target){return mid;}// 2. 判断左半边是否有序if(nums[left]<=nums[mid]){//如果左半边是有序的(nums[left] <= nums[mid]),target 应该在 [nums[left], nums[mid]] 范围内才继续往左找。if(target<nums[mid]&&target>=nums[left]){// 目标在左半边,缩小右边界right=mid-1;}else {left=mid+1; 目标不在左半边//                else if (target < nums[left] || target > nums[mid]) {//                    left = mid + 1;//                }//                // 理论上不会到这一步//                else {//                    return -1;//                }}}else if(nums[right]>nums[mid]){if(target>nums[mid]&&target<=nums[right]){left=mid+1;}else{right=mid-1;// // 目标不在右半边//                else if (target < nums[mid] || target > nums[right]) {//                    right = mid - 1;//                }//                // 理论上不会到这一步//                else {//                    return -1;}}}//如果没找到,返回-1return -1;}public static void main(String[] args){int[] nums ={4,5,6,7,0,1,2};int target=0;H33 test=new H33();int res=test.search(nums,target);System.out.print(res);}}
http://www.lryc.cn/news/2394840.html

相关文章:

  • 3D-激光SLAM笔记
  • Golang 配置国内代理
  • Android bindservice绑定服务,并同步返回service对象的两个方法
  • 5G 核心网 UE 状态深度剖析:机制、迁移与演进
  • HomeKit 基本理解
  • [SC]SystemC在CPU/GPU验证中的应用(三)
  • gunicorn多线程部署django导致的登陆错误
  • (LeetCode 每日一题) 909. 蛇梯棋 (广度优先搜索bfs)
  • PostgreSQL ERROR: out of shared memory处理
  • 生成https 证书步骤
  • 34、请求处理-【源码分析】-Model、Map原理
  • 设计模式——适配器设计模式(结构型)
  • 小黑大语言模型通过设计demo进行应用探索:langchain中chain的简单理解demo
  • 秒杀系统—5.第二版升级优化的技术文档三
  • [SC]SystemC在CPU/GPU验证中的应用(六)
  • 【STM32】HAL库 之 CAN 开发指南
  • WPF的基础设施:XAML基础语法
  • DeepSeek R1-0528 新开源推理模型(免费且快速)
  • Go 语言的 GC 垃圾回收
  • [git每日一句]your branch is behind ‘origin/master‘
  • 【QT】在QT6中读取文件的方法
  • 安全帽目标检测
  • Java工厂方法模式详解
  • 【pytorch学习】土堆pytorch学习笔记2
  • Eclipse 插件开发 5.3 编辑器 监听输入
  • iOS 集成网易云信IM
  • Parasoft C++Test软件单元测试_实例讲解(对多次调用的函数打桩)
  • azure web app创建分步指南系列之二
  • 题海拾贝:P8598 [蓝桥杯 2013 省 AB] 错误票据
  • MySQL 8.0:解析