/**
* 33. 搜索旋转排序数组
* @author wsq
* @date 2020/10/06
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [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
链接:https://leetcode-cn.com/problems/search-in-rotated-sorted-array
*/
package search;
public class SearchRotationArray {
/**
* 题目要求时间复杂度为:O(log(n)),首先相当二分查找
* 类二分查找,与二分查找类似,不过判断left、right双指针的移动有所不同
* 由于所求数组是在原有序数组经过旋转得到,分为了两段有序的片段,
* 我们可以比较索引0与mid的关系,判断mid属于半段有序还是后半段,当找到有序片段后,剩下的跟我们正常的二分查找就一样了
* @param nums
* @param target
* @return
*/
public int search(int[] nums, int target) {
int n = nums.length;
if(n == 0){
return -1;
}
if(n == 1){
return nums[0] == target ? 0 : -1;
}
int left = 0;
int right = n - 1;
while(left <= right){
int mid = (left + right) >> 1;
if(nums[mid] == target){
return mid;
}
if(nums[0] <= nums[mid]){
if(nums[0] <= target && target < nums[mid]){
right = mid - 1;
}else{
left = mid + 1;
}
}else{
if(nums[mid] < target && target <= nums[n-1]){
left = mid + 1;
}else{
right = mid - 1;
}
}
}
return -1;
}
}
相关推荐
奇异值分解(SVD)C++实现
奇异值分解SVD(紧奇异值分解,截断奇异值分解)C++实现
搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [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], targ...
AD7920实战:从咪头到ADC的音频信号采集电路设计全解析(附电路图)
本文详细解析了基于AD7920 ADC芯片的音频信号采集电路设计全流程。从驻极体咪头的驱动、AD8542运放的两级增益与偏置设计,到关键的抗混叠滤波器配置,以及ADC接口的驱动缓冲与PCB布局要点,提供了完整的实战指南与电路图,帮助开发者实现高质量音频信号采集。
leetcode:33. 搜索旋转排序数组
对于旋转数组,nums=[4,5,6,7,0,1,2]
ArcGIS通过已知坐标点转面(通过excel文件,有工具可批量生成面要素)
通过使用ArcGIS中的工具,将坐标点XY数据转换成可视化的点线面矢量数据,更加方便快捷有效的获取对应信息
ESP-Mesh-Lite vs ESP-Mesh:如何选择适合你的物联网组网方案?
本文深入对比了乐鑫ESP-Mesh-Lite与ESP-Mesh两种物联网组网方案的核心差异。重点解析了ESP-Mesh-Lite分布式协议栈架构的优势,即每个节点拥有独立IP,可直接访问外部网络,极大简化了应用层开发。文章从网络架构、性能、开发体验及适用场景等多维度进行分析,为开发者根据项目需求(如分布式数据采集、智能家居或集中控制网络)选择最合适的方案提供了清晰的决策框架。
搜索旋转排序数组(LeetCode 33)
这启示我们可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分 [l, mid] 和 [mid + 1, r] 哪个部分是有序的,并根据有序的那个部分确定我们该如何改变二分查找的上下界,因为我们能够根据有序的那部分判断出 target 在不在这个部分。拿示例来看,我们从 6 这个位置分开以后数组变成了 [4, 5, 6] 和 [7, 0, 1, 2] 两个部分,其中左边 [4, 5, 6] 这个部分的数组是有序的,其他也是如此。将旋转排序数组均分,一定有一部分的数组是有序的。
FileZilla Server目录显示失败的处理方法
这两天河南大暴雨挺严重导致多处停电,我远在郑州机房的服务器也断网连不上了。一直到今天下午才恢复,影响较大,有些客户要数据,可是数据因为断网拿不到。于是我想,要是能把服务器的数据备份到其他地方,比如我的本机或者另外一台电脑该多好。 于是今天一整天我都在找远程备份数据的方法,把一台服务器上的数据实时同步到另外一台上。或者两台服务器互相同步。 找了半天发现了FreeFileSync这个宝藏软件,它的原理很简单是通过ftp传输数据。 我得先在服务器上安装个ftp服务,首选filezilla server,安..
LeetCode 33——搜索旋转排序数组
1. 题目 2. 解答 2.1. 方法一 直接进行二分查找,在判断查找方向的时候详细分类。 当 nums[mid] < target 时, 若 nums[left] <= nums[mid],此时,target 一定在nums[mid] 右边,继续向右查找。 若 nums[left] > nums[mid] <...
Go语言集成Ollama本地大模型:gollama库实战指南
在当今的AI应用开发中,大型语言模型(LLM)的集成已成为关键技术。其核心原理是通过API调用,将自然语言处理能力嵌入到各类应用中。从技术价值看,本地化部署的LLM解决了数据隐私、网络延迟和持续成本三大痛点,尤其适合处理敏感数据或对实时性要求高的场景。在工程实践中,开发者常使用专门的客户端库来简化与模型服务的交互,例如通过封装REST API、提供类型安全接口和流式处理支持,从而提升开发效率和代码健壮性。具体到Go语言生态,结合Ollama这一流行的本地大模型运行工具,可以实现完全离线、低延迟的AI功能集成
G120变频器抱闸逻辑在提升机上应用
一、前言: 对于提升机、起重机、堆垛机、升降机等提升机构,负载为位能性负载,在设备启动和停止阶段,由于重物作用,可能会出现“溜车”现象、控制变频器与电机抱闸时许可以解决此问题 使用具有矢量控制功能的变频器 二、参数设置 抱闸控制时序: 启动: 1、变频器接收到启动命令时-----输出电流对电机进行励磁,经过P346电机励磁时间(==丹佛斯 设置启动电流延时0.5S)------达到一定的转矩 2、变频器输出开抱闸命令,经过P1216延时打开抱闸时间(==PLC延时控制打开抱闸) 注意:抱闸
LeetCode33-搜索旋转排序数组
LeetCode33-搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 示例 1: 输入: nums = [...
OPTEE v4.4.0 qemu_v8环境搭建(支持Hafnium)
一、前提条件 二、拉取代码 三、下载工具链 四、修改代码 五、编译 六、运行
LeetCode 33 搜索旋转排序数组
LeetCode 33 搜索旋转排序数组题目描述思路代码 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 思路 求...
Probability and Statistics - 4th edition
Probability and Statistics - 4th edition
迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)
迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)
LeetCode 33搜索旋转排序数组
LeetCode 33搜索旋转排序数组 题目简述:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。 输入:nums = [4,5,6,7,0,1,2], target = 0 输出:4 输入:nums = [4,5,6,7,0,1,2], target = 3
pscad IEEE标准系统搭建说明
pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。
LeetCode33 搜索旋转排序数组(Java实现)
LeetCode33 搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。 示例 1: 输入: nums = [4,5...
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
LeetCode 33:搜索旋转排序数组(Java实现)
LeetCode 33:搜索旋转排序数组题目思路代码结果 题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O(log n) 级别。 示例 1: ...
LeetCode 33.搜索旋转排序数组/二分搜索
此题来自于:LeetCode 33.搜索旋转排序数组/二分搜索 因为题目要求O(logn),且虽然旋转了(也有可能没旋转),但是还是部分有序的,采取二分搜索,但是关键在于目前的搜索区间[left,right)内,可能并不是有序的(因为旋转过了)。 所以只能分类: 当mid > nums[left]时说明目前mid在旋转过后的左段,当且仅当target < m &&...
leetcode33.搜索旋转排序数组-medium
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]。输入:nums = [4,5,6,7,0,1,2], target = 0。输入:nums = [4,5,6,7,0,1,2], target = 3。
LeetCode 33 搜索旋转排序数组(java)
LeetCode 33 搜索旋转排序数组(java) 一、题目描述: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 例如:数组【0,1,2,3,4,5,6,7】可能变为【4,5,6,7,0,1,2】 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1. 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是O(log n)级别 二、示例: 三、解题思路:...
leetcode 33. 搜索旋转排序数组
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]。输入:nums = [4,5,6,7,0,1,2], target = 0。输入:nums = [4,5,6,7,0,1,2], target = 3。
Leetcode 33. 搜索旋转排序数组 C++
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], target = 0 输出: 4 2. 输入: nums = [
33.搜索旋转排序数组
• 反之,如果 nums[mid] < nums[right],说明右半部分是有序的,同样判断 target 是否在这个有序区间内(即 nums[mid] < target && target <= nums[right]),若是就在右半部分继续查找(更新 left = mid + 1),否则就在左半部分查找(更新 right = mid - 1)。给定一个整数数组 nums ,按升序排序后在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2])。
4173



被折叠的 条评论
为什么被折叠?



