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

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.xdnf.cn/news/749917.html

相关文章:

  • 基于热力学熵增原理的EM-GAM
  • Less基础语法
  • Python打卡训练营学习记录Day41
  • C++:参数传递方法(Parameter Passing Methods)
  • day28 python训练营 类的定义与方法
  • 【Java】ForkJoin 框架
  • linux 1.0.7
  • VC++: identifer “M_PI“ is undefined
  • B3623 枚举排列(递归实现排列型枚举)
  • javaScirpt学习第五章(函数)-第二部分
  • 应用于分子生成的免训练引导多模态流模型 - TFG-Flow 评测
  • 用不太严谨的文字介绍遥测自跟踪天线的基本原理
  • Java中的继承
  • Target店铺应该如何入驻?
  • 自定义Spring Boot Starter
  • 【课堂笔记】标签传播算法Label Propagation Algorithm(LPA)
  • DFS入门刷题
  • vasp的输出文件解读--OUTCAR
  • 常见的RAG文档解析辅助工具汇总及企业选型思考
  • 一周学会Pandas2之Python数据处理与分析-数据重塑与透视-pivot() - 透视 (长 -> 宽,有限制)
  • [SC]SystemC在CPU/GPU验证中的应用(四)
  • 图像修复的可视化demo代码
  • PostIn入门教程 - 使用IDEA插件快速生成API接口定义
  • 流媒体基础分析:延迟分析与安全性保障
  • 牛客小白月赛117
  • Baklib知识中台驱动服务升级
  • OD 算法题 B卷【模拟消息队列】
  • Linux环境搭建MCU开发环境
  • [001]从操作系统层面看锁的逻辑
  • 计算机组织原理第三章