leetcode 33. 搜索旋转排序数组 golang实现

【Leetcode】33. 搜索旋转排序数组(Search in Rotated Sorted Array) Leetcode - 33 Search in Rotated Sorted Array (Medium) 题目描述:给定一个旋转的有序数组,例如有序数组 [0,1,2,4,5,6,7] 经一次旋转后可得 [4,5,6,7,0,1,2] ,再给定一个 target 值,返回 target 值在数组中的下标,如果不在返回 -1,假设数组中无重复元素,时间复杂度要求为 O(logn)。 Input:... 阅读详情
描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。

搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -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
思路
O(log n) 一般就是二分法查找
找出target在左半区间的情况 即 target在[left, mid]
1. nums[left] < nums[mid] 即 left-mid区间 没有旋转  nums[left] <= target <= nums[mid] 则target属于左半区间
2. nums[left] > nums[mid] 即 left-mid区间 有旋转   target <= nums[mid] 则target属于左半区间
3. nums[left] > nums[mid] 即 left-mid区间 有旋转   target >= nums[left] 则target属于左半区间
其它情况 都属于右半区间
实现
func search(nums []int, target int) int {
	if len(nums) == 0 {
		return -1
	}
	left := 0
	right := len(nums) - 1


	for left <= right {
		mid := (left + right) / 2
		if target == nums[mid] {
			return mid
		}
		if nums[left] < nums[mid] && target <= nums[mid] && target >= nums[left] {
			right = mid - 1
		} else if nums[left] > nums[mid] && target <= nums[mid] {
			right = mid - 1
		} else if nums[left] > nums[mid] && target >= nums[left] {
			right = mid - 1
		} else {
			left = mid + 1
		}
	}

	return -1
}

TensorFlow_PyTorch实战:构建AI人工智能回归模型 回归分析是机器学习的核心任务之一,用于预测连续型目标变量(如房价、股票价格、用户留存时间等)。基础线性回归模型的数学原理与代码实现多项式回归模型的过拟合处理与正则化技巧自定义数据集加载与数据预处理流程动态图(PyTorch)与静态图(TensorFlow)的编程范式对比模型评估指标与可视化分析方法核心概念:对比两大框架的架构设计,解析回归模型核心组件数学原理:推导线性回归的假设函数、损失函数及优化算法算法实现:提供TensorFlow和PyTorch的完整代码示例项目实战。 阅读详情

相关推荐

西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序)

西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485) 西门子博途系列学习笔记SCL(三)______自由口通讯(RS485轮询程序) 文章目录西门子博途V16系列学习笔记SCL(三)___自由口通讯轮询程序(RS485)前言一、FreePort自由口通讯是什么?二、使用步骤1.模块参数定义2.定义FB功能块参数:3.程序代码如下(每天写代码100行,学不会你来找我):总结 前言 很长时间都没有更新了,主要是最近在学习罗克韦尔的STUDIO5000PLC编程软件,怎么说,和博

weixin_42940283的博客 1万+

Golang | Leetcode Golang题解之第33题搜索旋转排序数组

Golang | Leetcode Golang题解之第33题搜索旋转排序数组

weixin_66442839的博客 331

告别玄学调试:手把手教你读懂全志芯片的sys_config.fex配置文件(以i2c配置为例)

本文深入解析全志芯片的sys_config.fex配置文件,以I2C设备驱动为例,详细讲解从引脚定义到驱动加载的全过程。通过实战案例和高级调试技巧,帮助开发者快速掌握硬件配置与内核驱动的联动机制,提升开发效率。

weixin_33737134的博客 418

[Golang]力扣Leetcode—中级算法—排序和搜索—搜索旋转排序数组(遍历/二分法)

[Golang]力扣Leetcode—中级算法—排序和搜索—搜索旋转排序数组(遍历/二分法)

皮埃尔的博客 354

网络变压器等效电路及网络变压器中间抽头作用详解

       华强盛电子导读:要详细了解网络变压器周边EMC管控及网络变压器BOB-SMITH电路的连接原理,首先我们对网络变压器的认识及其电路各参数影响都要有个简要的认识,本文,对非理想网络变压器等效电路做一个详细的分析,其中重点讨论一下网络变压器中间抽头的作用其影响                          网络变压器等效电路及                        ...

网络变压器专业资料 6005

ubuntu20.04开机黑屏卡在/dev/sda1:clean,***files,***blocks,解决心得记录

这个问题如果你百度,会发现目前有很多种解决方法。 有更新显卡驱动的,有卸载上一次安装软件的,还有各种奇奇怪怪的故障原因。 如果你是属于上述情况,那么按照百度和论坛的各种指引操作一般都能解决。 但我这里主要说一种特殊情况,就是我什么也没有操作,我什么也没干。就是正常使用系统关了机突然就报错了。 这也是自己亲自遇到的问题,做个小记录方便以后自己回顾。 上一次出现这种情况我重装系统了,这次用了两个月又出现了,重装成本太高,我接受不了,于是找到解决办法。 首先找个终端进入,进入终端的方法很多,用安装u盘

qq_41517017的博客 2万+

go语言刷题: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] 。 给你 旋转

lanseali的博客 274

新能源场站必看:一次调频与AGC/AVC的协同控制逻辑解析(含典型拓扑图)

本文深度解析了新能源场站中一次调频与AGC/AVC的协同控制逻辑。针对电网频率与电压稳定需求,详细阐述了三者在响应时序、控制目标上的分工与配合,并重点剖析了以RCL-0923装置为核心的指令融合架构与典型拓扑,为场站实现高效、稳定的协同运行提供了清晰的实践指导。

brown的博客 1059

leetcode | go | 第33题 | 搜索旋转排序数组

【代码】leetcode | go | 第33题 | 搜索旋转排序数组。

iCling的博客 166

PT静态时序分析实战:从基础命令到高级报告解析

本文详细介绍了PT(PrimeTime)静态时序分析(STA)的实战技巧,从基础命令如pt_shell和report_timing的使用,到高级报告解析与问题排查。通过丰富的实例和脚本示例,帮助工程师快速掌握时序分析的核心技能,提升芯片设计验证效率。

weixin_29289821的博客 954

109. SAP ABAP 应用程序中的锁机制和工作原理介绍

SAP ABAP 系统中的锁概念,是 SAP ABAP 为了保证`数据一致性`而引入的一种保护机制。 像 SAP 这种复杂的企业级应用,系统中同一时间段的同一份数据,可能会有多个 Transaction(终端用户或者 API )同时进行读写操作。为了防止出现数据不一致,SAP ABAP 引入了锁机制。 这种锁机制并非数据库服务器层面的锁,而是在 SAP ABAP 应用服务器层面上工作,加锁和解锁都由专门的 ABAP Function Module 来完成。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1467

golang之leetcode33 旋转数组求值实现

题目: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 求解思路: 由题可知,有序,不重复数组,查询数组中等于某值的index, 复杂度为O(log n) ,联想到了二分查找法。 众所周知,二分查找必须是在有序数据里面进行。但

weixin_34593133的博客 339

第8章 - 异构系统的协同控制及最优控制 --> 最优控制

异构系统的协同控制及最优控制 --> 协同控制

赵继超的笔记 2259

LeetCode--33. 搜索旋转排序数组【直接二分】

关于这道题,我最开始想把这个旋转数组还原回去,但是后来发现没有那么麻烦,直接二分即可,重点在于关于当前区间的有序判断,故来写一份题解来分享一下。这道题到这里就结束了,如果还是没明白,或者有什么问题,欢迎给我留言!

Rinai的博客 687

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【LeetCode 热题100】搜索旋转排序数组(力扣33 / 81/ 153/154)(Go语言版)

本文深入探讨了LeetCode中四道关于「搜索旋转排序数组」的经典题目,涵盖了无重复和有重复元素的情况。通过二分查找的变形应用,文章详细解析了每道题的解题思路和Go语言实现代码。关键点包括判断有序区间、处理重复元素以及如何缩小搜索范围。文章还总结了各题的异同,并推荐了类似题目,帮助读者全面掌握二分查找在旋转数组中的应用。无论是初学者还是有经验的开发者,都能从中获得实用的解题技巧和代码实现方法。

小韩的博客 766

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

搜索旋转排序数组(LeetCode 33)

这启示我们可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分 [l, mid] 和 [mid + 1, r] 哪个部分是有序的,并根据有序的那个部分确定我们该如何改变二分查找的上下界,因为我们能够根据有序的那部分判断出 target 在不在这个部分。拿示例来看,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。将旋转排序数组均分,一定有一部分的数组是有序的。

Doublelv 的博客专栏。 1246

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

LeetCode 33. 搜索旋转排序数组 golang

33. 搜索旋转排序数组 三个测试用例, 这个题的难度是二分法的左侧条件很难写出来。 4 5 6 0 1 2 3 1 2 3 4 5 6 0 5 1 2 3 4 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度...

csdn_kou的博客 276

33. 搜索旋转排序数组【二分查找】

你必须设计一个时间复杂度为。按升序排列,数组中的值。,则返回它的下标,否则返回。经典二分模板题目,看注释。在预先未知的某个下标。

YouMing_Li的博客 433

leetcode练习之数组33.搜索旋转排序数组

题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 示例 1: 输入: nums = [4,5,6,7,0,1,2], t...

程序员早早的博客 217

(LeetCode-Hot100)33. 搜索旋转排序数组

文章摘要 LeetCode 33题要求在一个旋转后的有序数组中查找目标值,时间复杂度须为O(log n)。核心思路是利用二分查找,每次迭代判断左右半部分的有序性:若左半有序且目标在范围内,则搜索左半;否则搜索右半。代码实现通过比较中点与边界值来缩小搜索范围,确保高效性。示例演示了查找过程,验证了算法的正确性。该方法充分利用了旋转数组的特性,保证了最优时间复杂度。

小飞的博客 669

LeetCode:33 搜索旋转排序数组(Golang)

0.题目要求时间复杂度 O(logN) ,显然要用二分查找法;1.由于原数组是有序的,如果数组从中间点被旋转过,那么一定有:nums[0]>nums[len(nums)-1];2.考虑先用二分法找到旋转点,以旋转点为界的两个分数组是有序的,再用二分查找得到target的位置;3.找旋转点的逻辑为:取mid指针为left、right指针的中点,若 nums[left]>nums[mid],旋转点在mid(含)左边;否则旋转点在mid(不含)右边;依次递归查找;

Ser_Lancelot的博客 398

golang力扣leetcode 33.搜索旋转排序数组

33.搜索旋转排序数组33.搜索旋转排序数组题解代码 33.搜索旋转排序数组 33.搜索旋转排序数组 题解 代码 package main func search(nums []int, target int) int { left, right := 0, len(nums)-1 for left+1 < right { mid := left + (right-left)/2 if nums[mid] == target { return mid } if nums[

清风 437

每日一题---33. 搜索旋转排序数组[力扣][Go]

题目描述 整数数组 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 和一

weixin_52025712的博客 326

Golang 重返Leetcode战场之旅(Leetcode Go总结博客)

Golang 重返Leetcode战场之旅

Love 6's Private Blog 1176

LSGO——LeetCode实战(数组系列):33题 搜索旋转排序数组(Search in Rotated Sorted Array)

原题: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 示例 1: 输入: nums = [4,5,6,7,0,1,2], ...

小白cvnice的博客 195

33. 搜索旋转排序数组

二分查找

敢问路在何方?路在脚下!! 102
上一篇: leetcode 215. 数组中的第K个最大元素 golang实现
下一篇: leetcode 84. 柱状图中最大的矩形 golang实现
tzh_linux
博客等级 码龄12年 12粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值