LeetCode-热题100:33. 搜索旋转排序数组

题目描述

整数数组 nums 按升序排列,数组中的值 互不相同

在传递给函数之前,nums 在预先未知的某个下标 k0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]

给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1

你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

输入: nums = [4,5,6,7,0,1,2], target = 0
输出: 4

示例 2:

输入: nums = [4,5,6,7,0,1,2], target = 3
输出: -1

示例 3:

输入: nums = [1], target = 0
输出: -1

提示:

  • 1 <= nums.length <= 5000
  • -104 <= nums[i] <= 104
  • nums 中的每个值都 独一无二
  • 题目数据保证 nums 在预先未知的某个下标上进行了旋转
  • -104 <= target <= 104

代码及注释

func search(nums []int, target int) int {// 初始化左右指针left, right := 0, len(nums) - 1// 开始二分查找for left <= right {// 计算中间值mid := (left + right) / 2// 如果中间值等于目标值,则直接返回if nums[mid] == target {return mid}// 如果中间值大于等于左边界的值if nums[mid] >= nums[left] {// 如果中间值大于目标值且目标值大于等于左边界的值,则更新右指针继续查找if nums[mid] > target && nums[left] <= target {right = mid - 1} else {// 否则,更新左指针继续查找left = mid + 1}} else {// 如果中间值小于左边界的值// 如果中间值小于目标值且目标值小于等于右边界的值,则更新左指针继续查找if nums[mid] < target && nums[right] >= target {left = mid + 1} else {// 否则,更新右指针继续查找right = mid - 1}}}// 如果未找到目标值,则返回 -1return -1
}

代码解释:

  1. 初始化左右指针:

    • left 指向数组的第一个元素。
    • right 指向数组的最后一个元素。
  2. 二分查找:

    • 计算中间值 mid
    • 如果 mid 等于 target,则直接返回 mid
  3. 判断中间值与左边界的关系:

    • 如果 mid 大于等于 left,这意味着左半部分是有序的。
      • 如果 mid 大于 target 并且 target 大于等于 left,则目标值可能在左半部分,更新 right
      • 否则,目标值在右半部分,更新 left
    • 如果 mid 小于 left,这意味着右半部分是有序的。
      • 如果 mid 小于 target 并且 target 小于等于 right,则目标值可能在右半部分,更新 left
      • 否则,目标值在左半部分,更新 right

这种方法的时间复杂度是 O(log n),其中 n 是数组 nums 的长度。

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

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

相关文章

第三十四章 配置服务器访问

文章目录 第三十四章 配置服务器访问添加应用程序路径应用程序路径配置参数 第三十四章 配置服务器访问 本页介绍如何配置 网关连接的应用程序。对于这些配置任务&#xff0c;可以使用 Web Gateway 管理页面。其他文章介绍了如何配置默认设置和服务器。 每个Web 应用程序都必…

Ubuntu 下统计文件数量的命令

参考:https://blog.csdn.net/kxh123456/article/details/123811580 查看当前目录下的文件数量&#xff08;不包含子目录中的文件&#xff09; ls -l|grep "^-"| wc -l实例展示&#xff1a;如下图所示&#xff0c;当前路径下&#xff0c;有2个json文件和2个文件夹&a…

CMC学习系列 (1):EEG-EMG相干性均局限于对侧,同侧无显著相干性

CMC学习系列:EEG-EMG相干性均局限于对侧&#xff0c;同侧无显著相干性 0. 引言1. 主要贡献2. 方法和结果2.1 EEG-EMG相干谱2.2 EEG-EMG相干性地形图2.3 3种任务受影响侧与未受影响侧的一致性比较 3. 讨论和结论4. 总结欢迎来稿 论文地址&#xff1a;https://www.ahajournals.or…

函数进阶-Python

师从黑马程序员 函数中多个返回值的接收 def test_return():return 1,"hello",3x,y,ztest_return() print(x) print(y) print(z) 多种参数的使用 函数参数种类 位置参数 关键字参数 def user_info(name,age,gender):print(f"姓名是{name},年龄是:{age},性别是…

SublimtText修改远程机器文件

Sublime Text 本身并不强大&#xff0c;但是它方便使用插件扩展功能&#xff0c;所以变得很强大。今天介绍一个很实用的插件 SFTP &#xff0c;可以大大提高前端工作效率。 SFTP 安装 1. 打开 Sublime Text 2. 快捷键 shift ctrl p 键&#xff0c;呼出面板 3. 使用 Packag…

【深度学习】最强算法模型之:潜在狄利克雷分配(LDA)

潜在狄利克雷分配 1、引言2、潜在狄利克雷分配2.1 定义2.2 原理2.3 算法公式2.4 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c; 给我讲一讲LDA 小鱼&#xff1a;LDA&#xff1f; 你指的是&#xff1f; 小屌丝&#xff1a;就是算法模型的LDA啊&#xff0c; 你…

每天学习一个Linux命令之uptime

每天学习一个Linux命令之uptime Uptime命令是一个在Linux系统中用于查看系统运行时间和当前负载的工具。它提供了关于系统运行时间的信息&#xff0c;包括开机时间、平均负载的变动等。本篇博客将详细介绍uptime命令以及其所有可用的选项。 什么是uptime命令&#xff1f; Up…

【linux深入剖析】基础IO操作 | 使用Linux库函数实现读写操作 | 文件相关系统调用接口

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1.复习C文件IO相关操…

双亲委派机制总结

回顾了一下双亲委派机制&#xff0c;在这记录记录&#xff0c;下一篇会基于打破双亲委派机制来更新 1. 类加载&#xff1a; 多个java文件经过编译打包后生成可运行jar包&#xff0c;最后启动程序。首先需要通过类加载器把主类加载到JVM。主类在运行过程中如果使用到其他类&a…

2012r2安装mse

MSEinstall.exe /disableoslimit 在Windows 2012 R2上安装微软官方免费杀毒软件MSE(Microsoft Security Essentials) - 李家麒博客How To Install Microsoft Security Essentials In Windows Server 2012 R2

【Python】搭建 Python 环境

目 录 一.安装 Python二.安装 PyCharm 要想能够进行 Python 开发&#xff0c;就需要搭建好 Python 的环境 需要安装的环境主要是两个部分&#xff1a; 运行环境: Python开发环境: PyCharm 一.安装 Python (1) 找到官方网站 (2) 找到下载页面 选择 “Download for Windows”…

最小割问题合集,最大权闭合图,最大密度子图,最小权点覆盖,最大权独立子图,OJ练习,代码详解

文章目录 零、回顾1、流网络的割2、最小割问题 一、最小割的应用1.1POJ1966 -- Cable TV Network1.1.1原题链接1.1.2思路分析1.1.3AC代码 1.2ZOJ 2676 Network Wars1.2.1原题链接1.2.2思路分析1.2.3AC代码 1.3OPTM - Optimal Marks1.3.1原题链接1.3.2思路分析1.3.3AC代码 二、最…

QML | JavaScript作用域和命名解析2

QML | JavaScript作用域和命名解析3.绑定的作用域对象 属性绑定是QML中最常见的JavaScript应用。属性绑定关联了一个JavaScript表达式的结果和对象的一个属性,该属性所归属的对象被称为绑定的作用域对象。在下面的代码中,Item对象就是一个绑定的作用域对象: ​ 绑定可以…

JavaScript Uncaught ReferenceError: WScript is not defined

项目场景&#xff1a; 最近在Visual Studio 2019上编译libmodbus库&#xff0c;出现了很多问题&#xff0c;一一解决特此记录下来。 问题描述 首先就是configure.js文件的问题&#xff0c;它会生成两个很重要的头文件modbus_version.h和config.h&#xff0c;这两个头文件其中…

【Web APIs】正则表达式

目录 1.正则表达式 2.正则表达式语法 3.元字符 3.1边界符 3.2量词 3.3字符类 4.修饰符 1.正则表达式 正则表达式&#xff08;Regular Expression&#xff09;是用于匹配字符串中字符组合的模式&#xff0c;在 JavaScript中&#xff0c;正则表达式也是对象。通常用来查…

主流公链 - Solana

探索Solana区块链&#xff1a;下一代高性能区块链平台 1. Solana简介 Solana是一个高性能的区块链平台&#xff08;TPS能达到10W级别&#xff09;&#xff0c;旨在实现高吞吐量和低延迟的区块链交易处理。它采用了一系列创新技术&#xff0c;其中包括Proof of History (PoH)&a…

管理能力学习笔记三:管理者的时间管理法

时间管理三步法 1、对任务进行分类 2、估算任务时间 3、持续反思评估 对任务进行分类 分类方法&#xff1a;时间管理四象限 A类 B类 C类 D类 估算时间 需要预留休息时间和机动时间 持续反思评估 核对检查任务 自我提问 处理日常干扰的办法 对事情发出提问 对话内容进行…

华为云服务器租用价格_云服务器优惠活动_2024年新版报价

2024年华为云服务器租用价格表&#xff0c;云服务器优惠价格35元一年&#xff0c;配置为1核2G1M带宽HECS云服务器、L实例-2核2G3M配置46元1年、4核16G10M华为云服务器24元一个月、2核4G5M服务器158元一年&#xff0c;3年1010元、华为云香港服务器99元一年、增强型C7云服务器4核…

Unity 中的特殊文件

一 Resources 打包时&#xff0c;Resources下的所有资源都会被打进包。优化时确保Resources下的资源不重复 打包时Unity会对其加密压缩&#xff0c;打包后只读。可以用过Resourcrs.Load&#xff08;&#xff09;加载资源 二 StreamingAssets 打包后不会被压缩加密&#x…

P1036 [NOIP2002 普及组] 选数

思路&#xff1a;也算典型的dfs&#xff0c;题目就是要求从n个数中选择k个数&#xff0c;计算这k个数的和&#xff0c;看这个和是否是素数。我们知道在dfs时相当于是进行全排列&#xff0c;而结果要求的是组合后和的情况。根据排列和组合的关系&#xff0c;他们之间差K&#xf…