【LeetCode热题100】33. 搜索旋转排序数组(二分)

一.题目要求

整数数组 nums 按升序排列,数组中的值 互不相同
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= 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

四.解题思路

首先二分递归查找到旋转边界。
而后将target和数组末位置比较,决定是在左右哪个区间二分。

五.代码实现

class Solution {
public:int search(vector<int>& nums, int target) {int index = dfs(nums, 0, nums.size() - 1);int l;int r;if (target > *nums.rbegin()) {l = 0;r = index;} else {l = index + 1;r = nums.size() - 1;}while (l <= r) {int m = (l + r) / 2;if (nums[m] == target)return m;if (nums[m] > target) {r = m - 1;} elsel = m + 1;}return -1;}int dfs(vector<int>& nums, int left, int right) {if (left > right || (left + right) / 2 + 1 >= nums.size())return -1;if (nums[(left + right) / 2] > nums[(left + right) / 2 + 1])return (left + right) / 2;int a = dfs(nums, left, (left + right) / 2 - 1);int b = dfs(nums, (left + right) / 2 + 1, right);if (a != -1)return a;if (b != -1)return b;return -1;}
};

六.题目总结

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

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

相关文章

Java设计模式—策略模式(商场打折)

策略这个词应该怎么理解&#xff0c;打个比方说&#xff0c;我们出门的时候会选择不同的出行方式&#xff0c;比如骑自行车、坐公交、坐火车、坐飞机、坐火箭等等&#xff0c;这些出行方式&#xff0c;每一种都是一个策略。 再比如我们去逛商场&#xff0c;商场现在正在搞活动&…

Python技能树学习-函数

题目一&#xff1a;递归调用 函数的参数&#xff1a; def dump(index, default0, *args, **kw): print(打印函数参数) print(---) print(index:, index) print(default:, default) for i, arg in enumerate(args): print(farg[{i}]:, arg) for…

Vue 样式技巧总结与整理[中级局]

SFC&#xff08;单文件组件&#xff09;由 3 个不同的实体组成&#xff1a;模板、脚本和样式。三者都很重要&#xff0c;但后者往往被忽视&#xff0c;即使它可能变得复杂&#xff0c;且经常导致挫折和 bug。 更好的理解可以改善代码审查并减少调试时间。 这里有 7 个奇技淫巧…

[StartingPoint][Tier2]Archetype

Task 1 Which TCP port is hosting a database server? (哪个端口开放了数据库服务) $ nmap 10.129.95.187 -sC --min-rate 1000 1433 Task 2 What is the name of the non-Administrative share available over SMB? (哪个非管理共享提供了SMB?) $ smbclient -N -L 1…

Rsync——远程同步命令

目录 一、关于Rsync 1.定义 2.Rsync同步方式 3.备份的方式 4.Rsync命令 5.配置源的两种表达方法 二、配置服务端与客户端的实验——下载 1.准备工作 2.服务端配置 3.客户端配置同步 4.免交互数据同步 5.源服务器删除数据是否会同步 6.可以定期执行数据同步 三、关…

JVM的简单介绍

目录 一、JVM的简单介绍 JVM的执行流程 二、JVM中的内存区域划分 1、堆&#xff08;只有一份&#xff09; 2、栈&#xff08;可能有N份&#xff09; 3、程序计数器&#xff08;可能有N份&#xff09; 4、元数据区&#xff08;只有一份&#xff09; 经典笔试题 三、JVM…

2024.3.28力扣每日一题——访问完所有房间的第一天

2024.3.28 题目来源我的题解方法一 模拟方法二 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;1997 我的题解 方法一 模拟 使用一个Set存储已经访问过的房间号&#xff0c;直到Set中的元素个数等于房间数时停止模拟。 时间复杂度&#xff1a;O(day)。能够访问…

信息管理管理工程习题【1~4章】

1、将十进制68转换成二进制为&#xff08; &#xff09;&#xff0c;转换成八进制为&#xff08; &#xff09;&#xff0c;转换成十六进制为&#xff08; &#xff09;。 A. 1000100 102 40 B. 1000100 104 44 C. 1000101 102 40 D. 1000110 104 44 【答案】&#xff1a;B 2、…

如何恢复被.locked勒索病毒加密的服务器和数据库?

.locked勒索病毒有什么特点&#xff1f; .locked勒索病毒的特点主要包括以下几个方面&#xff1a; 文件加密&#xff1a;.locked勒索病毒会对受感染设备上的所有文件进行加密&#xff0c;包括图片、文档、视频和其他各种类型的重要文件。一旦文件被加密&#xff0c;文件的扩展…

淘宝商品描述API接口:轻松获取商品信息的新途径

淘宝商品描述API接口是淘宝开放平台提供的一种高效、便捷的新途径&#xff0c;旨在帮助开发者轻松获取淘宝商品的详细描述信息。通过这一接口&#xff0c;商家、开发者和用户都能获得商品标题、描述、属性、价格、图片等关键信息&#xff0c;从而满足各种业务需求。 在使用淘宝…

【Trick】AIGC翻译润色

1&#xff1a;可尝试在chat bar中提前输入以下内容&#xff1a; I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and imp…

指针的深入理解(六)

指针的深入理解&#xff08;六&#xff09; 个人主页&#xff1a;大白的编程日记 感谢遇见&#xff0c;我们一起学习进步&#xff01; 文章目录 指针的深入理解&#xff08;六&#xff09;前言一. sizeof和strlen1.1sizeof1.2strlen1.3sizeof和strlen对比 二.数组名和指针加减…

前端html+css+js常用总结快速入门

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 学习前端全套所有技术性价比低下且容易忘记&#xff0c;先入门学会所有基础的语法&#xff08;cssjsheml&#xff09;&#xff…

深度挖掘商品信息,jd.item_get API助您呈现商品全面规格参数

深度挖掘商品信息&#xff0c;特别是在电商平台上&#xff0c;对于商家、开发者和用户来说都至关重要。jd.item_get API作为京东开放平台提供的一个强大工具&#xff0c;能够帮助用户轻松获取商品的全面规格参数&#xff0c;进而为商品分析、推荐、比较等提供有力的数据支撑。 …

using和typename在C++中的用法

using关键字有两个主要用途&#xff1a; 1.类型别名&#xff1a;使用using可以为类型创建新的名称&#xff0c;这在模板编程中尤其有用。 using integer int; integer a 5; // 这里的integer就是int类型2.命名空间&#xff1a;using可以用来引入命名空间中的名字&#xff0c…

Liquid的Covenants:处理比特币脚本中的金额

1. 引言 Covenants契约是一种允许introspection自省的结构&#xff1a; 交易output可以对花费其的交易施加条件&#xff08;超出特定的“必须提供自身的有效签名和特定的公钥”&#xff09;。 Rusty Russell 之前研究过Covenants: Examining ScriptPubkeys in Bitcoin Scrip…

两相欠压继电器 WY-35A3 额定输入电压100V 导轨安装 JOSEF约瑟

系列型号&#xff1a; WY-35A4电压继电器&#xff1b;WY-35B4电压继电器&#xff1b; WY-35C4电压继电器&#xff1b;WY-35D4电压继电器&#xff1b; WY-35A4D电压继电器&#xff1b;WY-35A4T电压继电器&#xff1b; WY-35B4D电压继电器&#xff1b;WY-35B4T电压继电器&#xf…

人工智能时代过失犯理论的挑战与应对—以自动驾驶汽车交通肇事为例

内容提要以自动驾驶汽车为代表的人工智能产品致害所涉犯罪主体复杂多样、前置性规范缺失, 以及人工智能产品固有的自主与黑箱特性等问题给过失犯理论带来了变革的压力与挑战。传统过失犯理论、新过失犯理论以及客观归责理论都无法解决人工智能产品致害所涉过失犯罪认定问题。人…

【VMware】虚拟机及镜像Ubuntu安装

Vmware 一.VM是什么&#xff1f;有什么用&#xff1f;二.下载VMware Wworkstation Pro三.安装虚拟机四.安装镜像 一.VM是什么&#xff1f;有什么用&#xff1f; vmware是一款运行在windows系统上的虚拟机软件&#xff0c;可以虚拟出一台计算机硬件&#xff0c;方便安装各类操作…

K8s学习七(服务发现_2)

Ingress Service 主要用于集群内部的通信和负载均衡&#xff0c;而 Ingress 则是用于将服务暴露到集群外部&#xff0c;并提供灵活的 HTTP 路由规则。在实际应用中&#xff0c;它们通常结合使用&#xff0c;Service 提供内部通信和负载均衡&#xff0c;Ingress 提供外部访问和…