二分查找----4.搜索旋转排序数组

题目链接

/**

        升序数组在某个位置被分割为前后两部分,前后两部分整体互换;在被改变后的数组中找到目标值

        O(log n)---> 二分查找

        特点:

            旋转后的数组被分割为两个独立的递增区间

            左半区的最小值,大于右半区的最大值(mid所在区间的判断依据)

        二分策略:

            首先判断mid落在左区间还是右区间,其次判断target是否在端点到mid之间

            若target是在端点到mid之间,则可以确定target所在的半区,此时进行常规二分即可

            若target不在端点到mid之间,则无法具体确定其是在mid所在半区的剩余部分,还是另一个半区

            此时迭代left或right,淘汰无效部分,重新计算mid重复上述流程,直到搜寻结束或搜寻到target为止

        判断条件细化:

            mid所在区间:

                    nums[left] <= nums[mid]---> mid必定在左半区,反之在右半区; 依据:左半区的最小值,大于右半区的最大值

            target所在区间:

                    若mid在左半区:nums[left] < target && target < nums[mid]--->target与mid同在左半区,继续常规二分即可

                    若mid在右半区:nums[mid] < target && target < nums[right]--->target与mid同在右半区,继续常规二分即可

                    若表达式不成立,则无法确定target所在半区,则淘汰无效部分重新判断

            注意事项:

                    由于未真正找到数组两半区如何划分,当target所在分区确定后,原本判断target所处独立分区的代码功能会退化为常规二分,稍显冗余无法避免

*/

class Solution {/**升序数组在某个位置被分割为前后两部分,前后两部分整体互换;在被改变后的数组中找到目标值O(log n)---> 二分查找特点:旋转后的数组被分割为两个独立的递增区间左半区的最小值,大于右半区的最大值(mid所在区间的判断依据)二分策略:首先判断mid落在左区间还是右区间,其次判断target是否在端点到mid之间若target是在端点到mid之间,则可以确定target所在的半区,此时进行常规二分即可若target不在端点到mid之间,则无法具体确定其是在mid所在半区的剩余部分,还是另一个半区此时迭代left或right,淘汰无效部分,重新计算mid重复上述流程,直到搜寻结束或搜寻到target为止判断条件细化:mid所在区间:nums[left] <= nums[mid]---> mid必定在左半区,反之在右半区; 依据:左半区的最小值,大于右半区的最大值target所在区间:若mid在左半区:nums[left] < target && target < nums[mid]--->target与mid同在左半区,继续常规二分即可若mid在右半区:nums[mid] < target && target < nums[right]--->target与mid同在右半区,继续常规二分即可若表达式不成立,则无法确定target所在半区,则淘汰无效部分重新判断注意事项:由于未真正找到数组两半区如何划分,当target所在分区确定后,原本判断target所处独立分区的代码功能会退化为常规二分,稍显冗余无法避免*/public int search(int[] nums, int target) {//双指针置于有效部分两端int left = 0, right = nums.length - 1;while(left <= right) {int mid = (left + right) >>> 1;//找到目标值if(target == nums[mid]) {return mid;}//判断mid所在区间if(nums[left] <= nums[mid]) { //mid在左半区//判断target所在区间if(nums[left] <= target && target < nums[mid]) { //target必定在左半区right = mid - 1; //淘汰无效部分,后续为常规二分} else { //无法确定target所在半区left = mid + 1; //淘汰无效部分,重新判断(不在 left -> mid之间)}} else { //mid在右半区if(nums[mid] < target && target <= nums[right]) { //target必定在右半区left = mid + 1; //淘汰无效部分,后续为常规二分} else { //无法确定target所在分区right = mid - 1; //淘汰无效部分,重新判断(不在 mid -> right之间)}}}return -1;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90505.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

地球表面附近两点之间距离、高低角和方位角的计算方法,VC++代码实操!

书接上文&#xff0c;这篇文章介绍具体的VC编程实现&#xff0c;代码实操。任何一个算法&#xff0c;你必须将其编写为代码&#xff0c;运行结果正确&#xff0c;才算真正掌握了&#xff0c;否则都是似懂非懂&#xff0c;一知半解&#xff0c;下面先给出仿真结果的截图&#xf…

uniapp各大平台导航组件

最近有个需求要点击导航然后跳出各家导航软件话不多出直接贴出代码&#xff1a;这个可以作为组件引入<template><view><view class"nav" :style"{color: customColor}" click.stop"openMap">{{title}}</view><!-- 弹…

Access开发一键删除Excel指定工作表

Hi&#xff0c;大家好&#xff01;又到了每周给大家更新的时间了&#xff0c;这周给大家讲讲excel的处理操作吧。在开始前&#xff0c;先给大家汇报一下我们框架的进度&#xff0c;最近两周没有直播&#xff0c;所以大家不太清楚目前的进度&#xff0c;框架目前就差权限了&…

无广告终端安全产品推荐:打造纯净办公环境的安全之选

在数字化办公时代&#xff0c;终端安全防护是企业和个人不可忽视的重要环节。然而&#xff0c;许多传统安全软件往往伴随着频繁的广告弹窗和推广信息&#xff0c;不仅干扰正常工作&#xff0c;还可能成为潜在的安全隐患。本文将为您介绍几款「无广告、无捆绑」的终端产品&#…

使用UE5自带节点InteriorCubemap制作假室内效果

Interior Mapping&#xff08;室内映射&#xff09;是一种用着色器方法模拟室内结构纹理的方式&#xff0c;避免了真实对室内场景建模造成的模型面数渲染开销&#xff0c;在《蜘蛛侠》《城市天际线》等游戏中都采用了该技术。 UE自带了节点InteriorCubemap&#xff08;Unity S…

基于单片机睡眠质量/睡眠枕头设计

传送门 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目速选一览表 &#x1f449;&#x1f449;&#x1f449;&#x1f449;其他作品题目功能速览 概述 随着现代社会生活节奏的加快&#xff0c;睡眠质量问题日益受到人们的关注。本研究设计了一种基于…

Ajax第一天

AJAX概念&#xff1a;AJAX 是浏览器与服务器进行数据通信的技术&#xff08;把数据变活&#xff09;语法&#xff1a;1.引入 axios.js&#xff1a;https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js2.使用 axios 函数✓ 传入配置对象✓ 再用 .then 回调函数接收结果&#…

AI大模型各类概念扫盲

以下内容整理自AI&#xff0c;进行一个概念扫盲&#xff1a;Prompt&#xff08;提示词&#xff09; Prompt是用户提供给AI模型的指令或问题&#xff0c;用于引导模型生成特定输出。良好的Prompt设计能显著提升模型的任务理解能力和响应质量&#xff0c;例如通过结构化提示&…

Linux系统编程——网络

一、TCP/UDP 1、osi模型 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层&#xff08;下层为上层提供服务&#xff09; 2、TCP/IP模型&#xff08;TCP/IP协议栈&#xff09; 应用层&#xff1a; HTTP&#xff08;超文本传输协议&#xff09;、FTP&#xff08;文件…

taro+pinia+小程序存储配置持久化

主要通过taro的getStorageSync,setStorageSync实现配置持久化 // https://pinia.esm.dev/introduction.html import { defineStore } from pinia; import { CreditCardDateUtils } from /untils/compute; import { getStorageSync, setStorageSync } from "tarojs/taro&qu…

抖音小游戏好做吗?

从0到1&#xff0c;教你打造爆款抖音小游戏随着移动互联网的发展&#xff0c;抖音小游戏凭借便捷即玩、流量庞大等优势&#xff0c;成为游戏开发者的热门选择。想知道如何开发出一款吸睛又好玩的抖音小游戏吗&#xff1f;下面就为你详细介绍开发流程。一、前期规划明确游戏类型…

Spring Boot 3核心技术面试指南:从迁移升级到云原生实战,9轮技术攻防(含架构解析)

面试官&#xff1a;cc程序员&#xff0c;聊聊Spring Boot 3的那些事儿&#xff1f; 场景背景 互联网大厂云原生架构部面试官老王&#xff0c;与自称"Spring Boot骨灰粉"的cc程序员展开技术对决。 面试过程 第一轮&#xff1a;迁移升级 面试官&#xff1a;Spring Boot…

技术演进中的开发沉思-42 MFC系列:Components 与 ActiveX Controls

点击程序启动时&#xff0c;是不是看过有加载的画面。在VC开发时&#xff0c;可使用 VC 的 Component Gallery&#xff0c;找到 Splash screen 组件&#xff0c;当时觉得组件就是给程序员的暖手宝。一、Component GalleryComponent Gallery 在 VC 里的位置很特别 —— 它藏在 “…

抽象类、接口、枚举

第八天&#xff08;坚持&#xff09;抽象类1.什么是抽象类&#xff0c;作用特点。抽象类是面向对象编程中一种特殊的类&#xff0c;它不能被实例化&#xff0c;主要用于作为其他类的基类&#xff08;父类&#xff09;。抽象类的主要作用是定义公共结构和行为规范&#xff0c;同…

在Ubuntu上使用QEMU仿真运行ARM汇编

ARM汇编一般无法在PC上直接运行&#xff0c;因为ARM和x86架构是不一样的。但是很多时候用ARM开发板是很不方便的&#xff0c;所以能不能直接在PC上仿真运行ARM汇编来练习呢&#xff1f;当然可以&#xff0c;那就是&#xff1a;使用QEMU来仿真。这篇文章我们就来演示下如何在Ubu…

【趣味解读】淘宝登录的前后端交互机制:Cookie-Session 如何保障你的账户安全?

在现代Web应用中&#xff0c;前后端交互是核心功能之一&#xff0c;而用户认证又是其中最关键的部分。本文将以淘宝登录为例&#xff0c;详细解析基于Cookie-Session的前后端交互流程&#xff0c;帮助开发者理解这一常见的安全认证机制。生动理解一下什么是cookie和seesion我们…

贪心算法(基础算法)

1.引言 ok啊&#xff0c;拖更这么长时间也是没有压力&#xff08;doge&#xff09; 不说啥&#xff0c;直接进入正题。 2.概念 这个贪心算法呢&#xff0c;看名字就知道&#xff0c;不就是每个步骤都挑最好的嘛&#xff0c;有啥难的。 这么说的话......其实确实&#xff0c…

简单的mcp 服务示例

参考&#xff1a;https://www.bilibili.com/video/BV1nyVDzaE1x 编写自己的tools.py #### tools.py from pathlib import Path import osbase_dir Path("./test")def read_file(name: str) -> str:"""Return file content. If not exist, return …

DeepSeek-R1+豆包迭代一次完成中国象棋游戏

DeepSeeek- R1生成的棋盘符合中国象棋风&#xff0c;单独豆包无法画好象棋棋盘。提示词&#xff1a;使用html实现中国象棋游戏&#xff0c;要求支持人机对弈。等等&#xff0c;你需要实现完整版本。代码如下&#xff08;电脑走棋不对&#xff09;&#xff1a;<!DOCTYPE html…

阿里通义千问Qwen3深夜升级:架构革新+性能碾压

&#xff08;以下借助 DeepSeek-R1 & Grok3 辅助整理&#xff09; 北京时间2025年7月22日凌晨&#xff0c;阿里云通义千问团队发布了Qwen3旗舰模型的最新更新——Qwen3-235B-A22B-Instruct-2507-FP8。这一更新不仅在性能上实现了突破&#xff0c;还标志着开源大模型技术架…