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

二分查找进阶:旋转排序数组的两道经典题深度解析

目录一、搜索旋转排序数组LeetCode 33・中等题目描述解题思路Java 代码实现标准二分版复杂度分析核心知识点总结二、寻找旋转排序数组中的最小值LeetCode 153・中等题目描述解题思路Java 代码实现标准二分版复杂度分析核心知识点总结大家好今天我们来拆解两道二分查找的经典中等题搜索旋转排序数组和寻找旋转排序数组中的最小值。这两道题是二分查找从「有序数组」到「部分有序数组」的核心变形吃透它们能帮你彻底掌握二分查找的边界判断和灵活应用是算法面试的高频考点。一、搜索旋转排序数组LeetCode 33・中等题目描述整数数组nums按升序排列数组中的值互不相同。在传递给函数之前nums在预先未知的某个下标k0 k nums.length上进行了旋转使数组变为[nums[k], nums[k1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]]下标从 0 开始计数。给你旋转后的数组nums和一个整数target如果nums中存在这个目标值target则返回它的下标否则返回-1。你必须设计一个时间复杂度为O(log n)的算法解决此问题。示例plaintext输入nums [4,5,6,7,0,1,2], target 0 输出4 输入nums [4,5,6,7,0,1,2], target 3 输出-1解题思路旋转排序数组的核心特性数组被分成了两个有序的子数组。比如[4,5,6,7,0,1,2]被分成了[4,5,6,7]和[0,1,2]两个升序子数组。二分查找的关键每次二分后一定有一半是完全有序的我们通过判断哪一半有序来缩小搜索范围计算中间位置mid判断mid所在的左半区[left, mid]是否有序nums[left] nums[mid]如果左半区有序若target在左半区范围内nums[left] target nums[mid]则搜索左半区否则搜索右半区如果右半区有序nums[mid] nums[right]若target在右半区范围内nums[mid] target nums[right]则搜索右半区否则搜索左半区若nums[mid] target直接返回mid循环结束未找到则返回-1Java 代码实现标准二分版java运行public class SearchRotatedSortedArray { public int search(int[] nums, int target) { int left 0; int right nums.length - 1; while (left right) { int mid left (right - left) / 2; if (nums[mid] target) { return mid; // 找到目标值直接返回 } // 判断左半区是否有序 if (nums[left] nums[mid]) { // 目标在左半区有序范围内收缩右边界 if (nums[left] target target nums[mid]) { right mid - 1; } else { // 目标在右半区收缩左边界 left mid 1; } } else { // 右半区有序 // 目标在右半区有序范围内收缩左边界 if (nums[mid] target target nums[right]) { left mid 1; } else { // 目标在左半区收缩右边界 right mid - 1; } } } return -1; // 未找到目标值 } }复杂度分析时间复杂度O(logn)二分查找每次将搜索范围缩小一半时间复杂度为对数级。空间复杂度O(1)仅使用常数级额外空间。核心知识点总结旋转数组特性二分后必有一半是完全有序的这是二分查找的核心依据。边界判断必须用nums[left] nums[mid]判断左半区有序避免left mid时的边界错误。目标范围判断必须严格判断目标是否在有序区间内避免漏判或错判。二、寻找旋转排序数组中的最小值LeetCode 153・中等题目描述已知一个长度为n的数组预先按照升序排列经由1到n次旋转后得到输入数组。例如原数组nums [0,1,2,4,5,6,7]在变化后可能得到若旋转4次则可以得到[4,5,6,7,0,1,2]若旋转7次则可以得到[0,1,2,4,5,6,7]给你一个元素值互不相同的数组nums它原来是一个升序排列的数组并按上述情形进行了多次旋转。请你找出并返回数组中的最小元素。你必须设计一个时间复杂度为 O(logn) 的算法解决此问题。示例plaintext输入nums [3,4,5,1,2] 输出1 解释原数组为 [1,2,3,4,5] 旋转 3 次得到输入数组。 输入nums [4,5,6,7,0,1,2] 输出0解题思路旋转排序数组的最小值就是两个有序子数组的分界点旋转点。二分查找的核心逻辑计算中间位置mid比较nums[mid]和nums[right]若nums[mid] nums[right]说明[mid, right]是有序的最小值在[left, mid]区间包含mid若nums[mid] nums[right]说明[left, mid]是有序的最小值在[mid1, right]区间循环结束时left right指向的就是最小值Java 代码实现标准二分版java运行public class FindMinInRotatedSortedArray { public int findMin(int[] nums) { int left 0; int right nums.length - 1; // 当left right时循环结束指向最小值 while (left right) { int mid left (right - left) / 2; // mid所在的右半区有序最小值在左半区包含mid if (nums[mid] nums[right]) { right mid; } else { // mid所在的左半区有序最小值在右半区不包含mid left mid 1; } } return nums[left]; } }复杂度分析时间复杂度O(logn)二分查找每次将搜索范围缩小一半时间复杂度为对数级。空间复杂度O(1)仅使用常数级额外空间。核心知识点总结分界点判断通过nums[mid]和nums[right]的比较快速定位最小值所在区间是这道题的核心技巧。循环条件使用left right避免left right时的死循环循环结束时left就是最小值下标。边界处理当nums[mid] nums[right]时right mid保留mid因为mid可能是最小值当nums[mid] nums[right]时left mid 1排除mid因为mid一定不是最小值。

相关文章:

二分查找进阶:旋转排序数组的两道经典题深度解析

目录 一、搜索旋转排序数组(LeetCode 33・中等) 题目描述 解题思路 Java 代码实现(标准二分版) 复杂度分析 核心知识点总结 二、寻找旋转排序数组中的最小值(LeetCode 153・中等) 题目描述 解题思…...

JL杰理AC696N开发板常见问题FAQ-问题6:为什么提示“key 不匹配”?杰理的蓝牙芯片的key是什么?以及该如何添加key? 杰理key文件原理?

引言做杰理蓝牙音频系列芯片开发,第一次编译下载时,可能会遇到一个报错提示:“KEY不匹配”。很多新手一脸懵:key是什么?为什么要加?怎么加?其实这是杰理芯片的一套软件授权保护机制。本文以JL杰…...

MySQL Explain 输出结果与执行逻辑分析

MySQL Explain 输出结果与执行逻辑分析是数据库性能优化的核心工具之一。通过Explain命令,开发者可以深入理解SQL语句的执行计划,从而发现潜在的性能瓶颈并优化查询效率。无论是初学者还是资深DBA,掌握Explain的输出解读技巧都至关重要。本文…...

终极指南:Tectonic引擎中的现代字体处理技术详解

终极指南:Tectonic引擎中的现代字体处理技术详解 【免费下载链接】tectonic A modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive. 项目地址: https://gitcode.com/gh_mirrors/te/tectonic Tectonic作为一款现代化的TeX…...

lil_tea c++ style guide巢

一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...

PhotoshopCClinux部署实战:企业环境批量安装的10个最佳实践技巧

PhotoshopCClinux部署实战:企业环境批量安装的10个最佳实践技巧 【免费下载链接】photoshopCClinux Photoshop CC v19 installer for Gnu/Linux 项目地址: https://gitcode.com/gh_mirrors/ph/photoshopCClinux 在企业环境中高效部署Photoshop CC v19到多台L…...

GPU加速MediaPipe TouchDesigner插件终极指南:从零构建实时视觉交互

GPU加速MediaPipe TouchDesigner插件终极指南:从零构建实时视觉交互 【免费下载链接】mediapipe-touchdesigner GPU Accelerated MediaPipe Plugin for TouchDesigner 项目地址: https://gitcode.com/gh_mirrors/me/mediapipe-touchdesigner MediaPipe Touch…...

M2LOrder模型Node.js环境配置与项目脚手架生成指南

M2LOrder模型Node.js环境配置与项目脚手架生成指南 你是不是也遇到过这种情况?想用Node.js快速启动一个新项目,特别是想集成像M2LOrder这样的AI模型,结果光是环境配置就折腾了半天。装Node版本不对,依赖冲突,项目结构…...

终极Virtual Kubelet性能优化指南:10个实用调优策略提升大规模容器部署效率

终极Virtual Kubelet性能优化指南:10个实用调优策略提升大规模容器部署效率 【免费下载链接】virtual-kubelet Virtual Kubelet is an open source Kubernetes kubelet implementation. 项目地址: https://gitcode.com/gh_mirrors/vi/virtual-kubelet Virtua…...

Zotero PDF预览插件:告别窗口切换,让文献管理效率提升300%

Zotero PDF预览插件:告别窗口切换,让文献管理效率提升300% 【免费下载链接】zotero-pdf-preview Preview Zotero attachments in the library view. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-pdf-preview 你是否曾在文献海洋中迷失方…...

King Phisher插件开发教程:扩展你的钓鱼工具包功能

King Phisher插件开发教程:扩展你的钓鱼工具包功能 【免费下载链接】king-phisher Phishing Campaign Toolkit 项目地址: https://gitcode.com/gh_mirrors/ki/king-phisher King Phisher是一款功能强大的钓鱼活动工具包,从1.3.0版本开始引入了插件…...

HunyuanVideo-Foley部署案例:高校数字媒体实验室AI音效教学平台

HunyuanVideo-Foley部署案例:高校数字媒体实验室AI音效教学平台 1. 项目背景与需求 在数字媒体教学领域,音效制作一直是实践教学中的难点。传统音效制作需要专业录音设备和后期处理软件,不仅设备成本高,学习曲线也较为陡峭。某高…...

辅助驾驶场景应用:如何用视觉定位模型理解道路目标

辅助驾驶场景应用:如何用视觉定位模型理解道路目标 1. 从“指哪打哪”到“看懂路况”:视觉定位在辅助驾驶中的价值 想象一下,你坐在副驾驶,用手指着前方说:“注意右边那辆白色轿车,它可能要变道。” 驾驶…...

提升Docker镜像构建效率的10个秘诀:Docker Buildx和Bake高级构建技巧

提升Docker镜像构建效率的10个秘诀:Docker Buildx和Bake高级构建技巧 【免费下载链接】docs Source repo for Dockers Documentation 项目地址: https://gitcode.com/gh_mirrors/docs3/docs Docker Buildx和Bake是Docker生态系统中强大的高级构建工具&#x…...

深求·墨鉴部署常见问题解决:从环境配置到模型下载的避坑指南

深求墨鉴部署常见问题解决:从环境配置到模型下载的避坑指南 1. 环境准备与系统要求 1.1 硬件配置建议 在部署「深求墨鉴」之前,确保您的设备满足以下硬件要求: CPU:至少4核处理器,推荐Intel i5或同等性能以上的CPU…...

Zotero PDF预览插件终极指南:告别频繁切换,实现高效文献管理

Zotero PDF预览插件终极指南:告别频繁切换,实现高效文献管理 【免费下载链接】zotero-pdf-preview Preview Zotero attachments in the library view. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-pdf-preview 在学术研究和文献整理过程…...

ACE-Guard限制器:终极解决游戏卡顿的完整指南

ACE-Guard限制器:终极解决游戏卡顿的完整指南 【免费下载链接】sguard_limit 限制ACE-Guard Client EXE占用系统资源,支持各种腾讯游戏 项目地址: https://gitcode.com/gh_mirrors/sg/sguard_limit 还在为腾讯游戏卡顿而烦恼吗?ACE-Gu…...

Figma中文界面插件:让设计工具真正说中文

Figma中文界面插件:让设计工具真正说中文 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 当全球顶尖的设计工具Figma遇到中文用户,语言障碍常常成为创意表达的绊…...

如何快速解密QQ音乐加密文件:终极QMC解密工具完全指南

如何快速解密QQ音乐加密文件:终极QMC解密工具完全指南 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾经下载了QQ音乐的文件,却发现在其他播…...

Windows Cleaner:终极免费解决方案,轻松解决C盘爆红问题

Windows Cleaner:终极免费解决方案,轻松解决C盘爆红问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款专为Window…...

GeoJSON.io终极指南:免费在线地理数据编辑工具快速上手

GeoJSON.io终极指南:免费在线地理数据编辑工具快速上手 【免费下载链接】geojson.io A quick, simple tool for creating, viewing, and sharing spatial data 项目地址: https://gitcode.com/gh_mirrors/ge/geojson.io GeoJSON.io是一款完全免费的在线地理数…...

Expose部署实战:免费托管摄影作品集的3种最佳方案

Expose部署实战:免费托管摄影作品集的3种最佳方案 【免费下载链接】Expose A simple static site generator for photoessays 项目地址: https://gitcode.com/gh_mirrors/ex/Expose Expose是一款简单的静态网站生成器,专为摄影作品集设计。通过它…...

像素特工Ostrakon-VL部署遇挫?5分钟看懂err.log定位加载失败

像素特工Ostrakon-VL部署遇挫?5分钟看懂err.log定位加载失败 1. 为什么需要关注err.log? 当你兴致勃勃地部署好像素特工Ostrakon-VL这个充满游戏感的零售场景分析工具,却发现Web界面一片空白或者报错时,第一反应可能是"哪里…...

如何快速掌握lilToon:打造惊艳虚拟角色着色器的终极Unity指南

如何快速掌握lilToon:打造惊艳虚拟角色着色器的终极Unity指南 【免费下载链接】lilToon Feature-rich shaders for avatars 项目地址: https://gitcode.com/gh_mirrors/li/lilToon lilToon是一款功能丰富的Unity着色器工具,专为虚拟角色设计&…...

HsMod终极指南:让炉石传说游戏体验提升300%的免费插件

HsMod终极指南:让炉石传说游戏体验提升300%的免费插件 【免费下载链接】HsMod Hearthstone Modification Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod 还在为炉石传说冗长的动画和繁琐操作烦恼吗?HsMod插件正是为你…...

市场管理化技术市场细分与目标客户选择

市场管理化技术市场细分与目标客户选择 在竞争激烈的商业环境中,企业如何精准定位客户群体并高效满足其需求,成为决定成败的关键。市场管理化技术通过科学的市场细分与目标客户选择,帮助企业挖掘潜在机会,优化资源配置&#xff0…...

终极指南:探索vscode-browser-preview的CDP协议通信机制与事件驱动架构

终极指南:探索vscode-browser-preview的CDP协议通信机制与事件驱动架构 【免费下载链接】vscode-browser-preview A real browser preview inside your editor that you can debug. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-browser-preview vsc…...

如何快速将设计稿转换为动画:AEUX终极动效制作指南

如何快速将设计稿转换为动画:AEUX终极动效制作指南 【免费下载链接】AEUX Editable After Effects layers from Sketch artboards 项目地址: https://gitcode.com/gh_mirrors/ae/AEUX 还在为Figma到After Effects的转换烦恼吗?AEUX设计稿转换插件…...

揭秘babel-minify插件架构:20+核心插件如何实现JS极致压缩

揭秘babel-minify插件架构:20核心插件如何实现JS极致压缩 【免费下载链接】minify :scissors: An ES6 aware minifier based on the Babel toolchain (beta) 项目地址: https://gitcode.com/gh_mirrors/mi/minify 什么是babel-minify? babel-min…...

抖音视频下载技术深度解析:从API逆向到批量下载的完整实现

抖音视频下载技术深度解析:从API逆向到批量下载的完整实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback s…...