LeetCode讲解篇之33. 搜索旋转排序数组

news2024/11/17 14:28:57

文章目录

  • 题目描述
  • 题解思路
  • 题解代码

题目描述

题目链接
在这里插入图片描述

题解思路

旋转后的数组具备一个特性,如果把数组分割成两部分,必定至少有一部分是递增的,并且其中递增区间可以通过左端点小于右端点这个特征来确定

我们基于这个特性,进行二分查找数组时,判断递增区间是左区间还是右区间
然后基于该递增区间进行剪枝

  • 如果target不在我们确定的递增区间中,则舍弃该递增区间的后续查找
  • 如果target在我们确定的递增区间中,则舍弃另一个区间的后续查找

题解代码

func search(nums []int, target int) int {
    n := len(nums)
    if n < 2 {
        if nums[0] == target {
            return 0
        }
        return -1
    }

    l, r := 0, n - 1
    for l <= r {
        mid := (l + r) >> 1
        if nums[mid] == target {
            return mid
        }

		// 若 l == mid,意味着 [l, r] 这个区间内只有两个元素,检查该区间内是否存在目标值
        if l == mid {
            if nums[r] == target {
                return r
            }

            return -1
        }

        if nums[l] < nums[mid] {
            // 左区间 l ~ mid 为递增区间
            if nums[l] <= target && target < nums[mid] {
           		// 目标值在递增区间内
                r = mid - 1
            } else {
            	// 目前值不在递增区间内
                l = mid + 1
            }
        } else {
            // 右区间 mid ~ r 为递增区间
            if nums[mid] < target && target <= nums[r] {
            	// 目标值在递增区间内
                l = mid + 1
            } else {
            	// 目标值不在递增区间内
                r = mid - 1
            }
        }
    }

	// 二分搜索未找到目标值,返回-1
    return -1
}

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

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

相关文章

通信工程学习:什么是MIMO多输入多输出技术

MIMO:多输入多输出技术 MIMO(Multiple-Input Multiple-Output)多输入多输出技术是一种在无线通信中广泛应用的技术,它通过利用多个天线进行数据传输和接收,可以显著提高无线通信系统的性能和容量。以下是对MIMO技术的详细解释: 一、定义与原理 MIMO技术…

XWF使用指南

简介 X-Ways Forensics 是由 Stefan Fleischmann 编写的一个轻量化的应急响应及取证工具&#xff0c;是 WinHex 的法证版本&#xff0c;因此界面逻辑和 WinHex 较为相似。在配置好 mplayer 的情况下&#xff0c;程序总体积在 100MiB 左右&#xff0c;运行时内存占用极低&#…

【数据修复指南】手把手教你使用线性插值填补各类遥感数据缺失——Modis、Landsat和Sentinel

线性插值 1. 写在前面2. MODIS数据插值3. Landsat数据插值3.1 参数修改以适应其他类型的遥感数据3.2 Landsat数据汇总3.3 Sentinel卫星介绍 1. 写在前面 之前我写了使用年内均值或者中值来填补数据控制的方法&#xff0c;这种方法较为简单&#xff0c;不够精确。因此&#xff0…

面向人工智能: 对红酒数据集进行分析 (实验四)

由于直接提供截图是不切实际的&#xff0c;我将详细解释如何使用scikit-learn&#xff08;通常称为sk-learn&#xff09;自带的红酒数据集进行葡萄酒数据的分析与处理。这包括实验要求的分析、数据的初步分析&#xff08;完整性和重复性&#xff09;以及特征之间的关联关系分析…

SAP EWM QM 集成

目录 1 简介 2 业务流程 3 后台配置 4 主数据 5 业务操作 5.1 创建 EWM 交货单 5.2 不同的质检结果导致不同的入库地点 - 质检通过 5.3 不同的质检结果导致不同的入库地点 - 质检失败 1 简介 EWM 与 QM (quality management) 集成,自动 or 手动执行质检流程。质检可以…

现代cpp多线程与并发初探

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 在现代c(c20)中,有了jthread和协程的概念,使得我们编写并发程序更加方便. 这里作简单学习. 前言知识 多线程编程 std::thread 用于创建一个执行的线程实例,所以它是一切并发编程的基础,使用时需要包含 <thread…

XSS(内含DVWA)

目录 一.XSS的攻击方式&#xff1a; 1. 反射型 XSS&#xff08;Reflected XSS&#xff09; 2. 存储型 XSS&#xff08;Stored XSS&#xff09; 3. DOM型 XSS&#xff08;DOM-based XSS&#xff09; 总结 二..XSS的危害 三.常见的XSS方式 1.script标签 四.常见基本过滤方…

假期旅行数仓项目--OLAP

需要这个完整离线数仓项目的源码和流程PPT可以私信我&#xff0c;可以帮助解决项目中遇到的问题&#xff0c;做完项目可以让你对数仓有更加清晰的认识 项目流程&#xff1a; 配置文件 kafka server.properties hive : hvie-site.xml 启动mysql 的binlog日志 修改maxwell配置…

QT:常用类与组件

1.设计QQ的界面 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPushButton> #include <QLineEdit> #include <QLabel>//自定义类Widget,采用public方式继承QWidget&#xff0c;该类封装了图形化界面的相关操作&#xff…

怎么绕开华为纯净模式安装软件

我是标题 众所周不知&#xff0c;华为鸿蒙系统自带纯净模式&#xff0c;而且 没法关闭 : ) 我反正没找到关闭键 以前或许会有提示&#xff0c;无视风险&#xff0c;“仍要安装”。但我这次遇到的问题是&#xff0c;根本没有这个选项&#xff0c;只有“应用市场”和“取消”&…

动态规划笔记

第一轮面试准备到第26题 一 解题步骤 对于动态规划问题&#xff0c;我将拆解为如下五步曲&#xff0c;这五步都搞清楚了&#xff0c;才能说把动态规划真的掌握了&#xff01; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历…

基于yolov8的海上红外目标系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的海上红外目标系统是一项集成了前沿技术的创新解决方案&#xff0c;专为复杂海洋环境下的目标检测而设计。该系统利用YOLOv8深度学习模型的强大目标检测能力&#xff0c;结合红外成像技术&#xff0c;实现了对海上小型船只、浮标、甚至水下潜器等目标…

Arch - 架构安全性_传输(Transport Security)

文章目录 OverView导图1. 概述2. TLS的基本概念2.1 什么是TLS&#xff1f;2.2 TLS与SSL的关系2.3 TLS的工作原理 3. TLS的核心组件3.1 加密算法3.2 哈希函数3.3 数字证书 4. TLS握手过程4.1 客户端Hello4.2 服务器Hello4.3 证书验证4.4 密钥交换4.5 会话密钥生成4.6 安全连接建…

解锁初中学习新境界 —— 初中通关宝典速记手册

在初中这个学习生涯的关键阶段&#xff0c;掌握扎实的基础知识是取得优异成绩的关键。为此&#xff0c;我们特别推荐《初中通关宝典》——一本专为初中生打造的各科基础知识速记手册&#xff0c;它将成为你学习路上的得力助手。 文章目录 1. 全科覆盖&#xff0c;精准速记2.科学…

K8S的Pod IP

pod 的ip 一般是提供给pod1与pod2之间的通信&#xff0c;它有两个特点 1. Pod IP会随着Pod实例 的创新创建&#xff08;重启&#xff09;发生变化&#xff1b; 2. Pod IP只在集群内节点可见&#xff0c;外部无法直接访问

基于Spring框架的分层解耦详解

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;Java Web关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Java Web 三层架构&#xff1a; Java Web可以大致被分为三层架构&#xff1a;…

基于单片机的水位检测系统仿真

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;DHT11温湿度采集温湿度&#xff0c;滑动变阻器连接ADC0832数模转换器模拟水位传感器检测水位&#xff0c;通过LCD1602显示信息&#xff0c;然后在程序里设置好是否…

《Spring Boot应用进阶:打造优雅的错误处理机制与全局异常拦截器》

文章目录 自定义异常类AppException封装业务有关的枚举类AppExceptionCodeMsg全局异常拦截器Handler响应类模板Resp案例展示 || Demo项目结构pom依赖DemoController实际执行结果 Demo案例Git地址 | Gitee 本文主要介绍自己在工作中在处理抛出异常类和封装响应类处理的模板总结。…

首屏优化之:SSR(服务端渲染)

引言 今天我们来聊一下首屏优化之SSR-服务端渲染&#xff08;Server-Side Rendering&#xff09;。 可能很多朋友并不了解什么是 SSR&#xff0c;包括在工作中写的网站是什么类型的也不太清楚&#xff0c;是 CSR 还是 SSR&#xff1f;作者在阅读过大量的文章之后&#xff0c;…

数据结构:二叉树OJ题篇 手把手带你入门数据结构~

文章目录 前言一、单值二叉树二、检查两颗树是否相同三、对称二叉树四、另一颗树的子树五、二叉树的前序遍历六、二叉树的后序遍历七、二叉树中序遍历八、二叉树的构建及遍历九、二叉树选择题1.二叉树性质2. 二叉树选择题1. 某⼆叉树共有 399 个结点&#xff0c;其中有 199 个度…