LeetCode 之 Search in Rotated Sorted Array

LeetCode题解(Java实现)——33.Search in Rotated Sorted Array(循环有序数组) 前言 欢迎关注我的 Github 仓库 https://github.com/bigrotor187/awesome-java-notes ,如果觉得有帮助,请点个 star 哟,目前主要在更 leetcode题解(Java版)和 剑指offer题解(Java版),可以点个star。 文本已收录至我的GitHub仓库,欢迎Star:awesome-java-notes 33. Search in... 阅读详情

题目链接:Search in Rotated Sorted Array

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

You are given a target value to search. If found in the array return its index, otherwise return -1.

You may assume no duplicate exists in the array.

参考:https://blog.youkuaiyun.com/linhuanmars/article/details/20525681


题意:对于一个已经排序好的在特定情况下进行翻转的数组中,查找特定值target,如果存在则返回下标,不存在返回-1;

解题思路:这道题是一道查找题,是二分查找的变形;对于进行特定翻转的数组,其有一个性质就是,从中间元素分开,那么肯定有一侧元素是已经排序好的。

所以对于数组,设left为左端,right为右端,mid = (left+right)/2 为中间点,那么有以下几种情
况:
(1)如果target==A[mid],直接返回mid;
(2)如果A[mid] < A[right],则表示mid右边是有序的且一定是升序,所有判断target是不是在A[mid]到A[right]之间,如果说明target在右边,否则到左边去找;
(3)如果A[mid] >= A[right],则表示左边有序且一定是升序,则同样判断target是否在A[left]到A[mid]之间,若在说明target在左边,否则到右边去找;

代码实现如下:

class Solution {
    public int search(int[] nums, int target) {
        int len = nums.length;

        int left = 0;
        int right = len-1;
        int mid;


        while(left<=right){
            mid = (left+right)/2;
            if(target == nums[mid])
                return mid;

            if(nums[mid] < nums[right]){
                if(target>nums[mid] && target<=nums[right]){
                    left = mid + 1;
                }
                else{
                    right = mid - 1;
                }
            }

            else {
                if(target>= nums[left] && target<nums[mid]){
                    right = mid - 1;
                }
                else{
                    left = mid + 1;
                }

            }
        }

        return -1;
    }
}

根据上诉算法,每次可以去除一半的数据,所以算法的时间复杂度为O(logn),空间复杂度为O(1)。

WinForm实战:如何用C#和PdfiumViewer打造一个功能齐全的PDF阅读器(含源码) 本文详细介绍了如何使用C#和PdfiumViewer库从零开始构建一个功能齐全的WinForm PDF阅读器。内容涵盖项目环境搭建、核心组件解析、基于命令模式的工具栏与UI架构设计,并深入讲解了智能缩放、页面导航、打印功能等核心交互的实现,以及内存管理和性能优化等高级话题,为开发者提供了一套完整的实战解决方案。 阅读详情

相关推荐

SRRC型号核准的模块豁免规则解析——如何利用完整型模块简化设备认证流程

本文详细解析了SRRC型号核准中模块豁免规则的应用,重点介绍了完整型模块的技术定义、豁免条件及实际应用场景。通过合理利用完整型模块,企业可显著简化设备认证流程,缩短上市周期并降低成本。文章还提供了模块选型指南和常见问题解决方案,帮助工程师高效应对SRRC认证挑战。

weixin_29306011的博客 933

【LeetCode】Search in Rotated Sorted Array 解题报告

【题目】 Suppose a sorted array is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If found in the a

跳出温水的青蛙 1万+

ROS2新手必看:5分钟搞定Gazebo机器人仿真环境搭建(含避坑指南)

本文为ROS2新手提供了在Gazebo中快速搭建机器人仿真环境的详细指南。内容涵盖ROS2与Gazebo的协同架构理解、基础环境配置、机器人模型构建、传感器集成以及环境创建,并包含实用的避坑指南和调试技巧,帮助开发者高效掌握物理仿真技术。

weixin_29100927的博客 430

Leetcode之Search in Rotated Sorted Array 问题

问题描述: Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2). You are given a target value to search. If f

漫漫学习路 294

【coze实战】基于Coze的公众号图文自动化生成工作流实战解析

【coze实战】基于Coze的公众号图文自动化生成工作流实战解析

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 1万+

Orcad原理图导入Allegro

在即将设计的PCB中,将层叠设置好后,执行File→import→parameters,将刚才导出的.prm文件导入,很多参数就自动设置好了,与已完成的PCB里的参数保持一致。具体操作是:在已完成的PCB里执行File→Exoprt→Parameters,弹出下图所示的对话框,选择需要导出的设计参数后,设置到导出路径,导出记录设计参数的文件(.prm)。在.brd文件导入网表后,往往需要页面大小、格点、各层叠里各要素显示颜色等参数,手动设置十分麻烦,我们可以在一块已经完成的PCB里导出记录设计参数的文件。

sinat_27007097的博客 2085

Leetcode之Search in Rotated Sorted Array II 问题

问题描述: Follow up for "Search in Rotated Sorted Array": What if duplicates are allowed? Would this affect the run-time complexity? How and why? Suppose an array sorted in ascending order is rotate

漫漫学习路 303

别再用RIDE了!VSCode+RobotFramework插件打造现代化测试开发环境

本文介绍了如何利用VSCode和RobotFramework插件构建现代化的测试开发环境,替代老旧的RIDE工具。详细讲解了环境配置、插件安装、智能代码补全、测试运行与调试等核心功能,帮助开发者提升自动化测试效率。文章还提供了高级技巧、最佳实践和常见问题解决方案,助力团队实现平滑迁移。

weixin_28829629的博客 480

LeetCode Search in Rotated Sorted Array II

把一个不降序的数组进行旋转,如[0,1,1,1,2,3,4,5]旋转3位成为[3,4,5,0,1,1,1,2]。在这样的数组中判断目标数字是否存在。

DRFish 160

AI 大模型应用数据中心的数据清洗工具

1. 背景介绍 在人工智能大模型应用的浪潮中,数据清洗作为数据预处理的重要环节,对于提升模型性能和可靠性具有至关重要的作用。数据中心作为人工智能模型的运行环境,面临着海量数据流和多样化的数据类型,如何高效、准确地进行数据清洗,成为应用大模型的关键问题之一。本文将详细介绍AI大模型应用数据中心的数据清洗工具,包括核心概念、算法原理、具体操作步骤、应用场

SuperAGI2025 1804

2025年开源气象大模型的实现原理与实践指南

气象大模型在人工智能时代实现了革命性突破,通过深度学习技术以更低的计算成本达到甚至超越传统数值天气预报的精度。开源气象大模型的出现使得全球研究者和机构都能参与气象AI的创新。本文详细解析了开源气象大模型的实现原理,包括核心架构、数据准备、训练方法和实际预测流程,并提供了实践指南。核心架构主要采用Transformer、图神经网络和扩散模型,处理多模态数据融合和时空联合建模。数据体系构建涉及数据来源、预处理和增强策略。模型训练关键技术包括损失函数设计、分布式训练优化和训练过程监控。微调与领域适应策略包括迁移学

专注AI大模型,软件混淆,授权 1181

[LeetCode] Search in Rotated Sorted Array II

https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ Follow up for "Search in Rotated Sorted Array": What if duplicates are allowe...

chuifuhuo6864的博客 77

代谢组数据分析(十九):随机森林构建代谢组预后模型

建立胃癌(GC)预后模型时,从队列3中的181名患者中,使用右删失结果数据进行了随机分层抽样,分为训练数据集(n = 121)和测试数据集(n = 60)。训练了一个包含1000棵树的随机生存森林(RSF)模型,根据它们基于排列的特征重要性来选择突出的特征。通过再次训练随机生存模型,并选取28种代谢物,建立了显示出色预测能力(AUROC = 0.832,95% CI:0.697-0.951)的最佳模型,用于预测测试数据集中GC患者的生存结果。

专注生信领域 1713

Search in Rotated Sorted Array LeetCode(java实现)

Search in Rotated Sorted Array LeetCode(java实现) [问题描述] (https://leetcode.com/problems/search-in-rotated-sorted-array/) 解题方法 例如{0,1,2,3,4,5,6,7}这个有序数组旋转以后,会有如上图所示七种情况,我们可以观察出,当数组中间值小于最末尾值时,说明数组后半段递增有...

qq_441467816的博客 245

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

LeetCode 33. Search in Rotated Sorted Array(二分查找)

题目来源:https://leetcode.com/problems/search-in-rotated-sorted-array/ 问题描述 33.Search in Rotated Sorted Array Medium Suppose an array sorted in ascending order is rotated at some pivot unknown to you...

da_kao_la的博客 404

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

leetcode-33. Search in Rotated Sorted Array

leetcode-33. Search in Rotated Sorted Array题目: 这里基本思想就是二分法,而二分法其实并不需要严格排序,比如这一题,由于是Rotated,所以如果将数组二分的话至少会有一半是严格二分的,又因为不存在重复元素,我们只要判断严格递增区域的是否包含target就好了。如果严格递增区域没有则必定在另一半。 当然corner case还是有点麻烦的。。需要认真判断一下。这里

千念飞羽的专栏 402

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

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

LeetCode 81. Search in Rotated Sorted Array II(二分)

Search in Rotated Sorted Array II Medium Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e., [0,0,1,2,2,5,6] might become [2,5,6,0,0,1,2]). You are gi...

da_kao_la的博客 203

LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现

题目描述: python实现Search in Rotated Sorted Array 搜索旋转排序数组   中文:假设按照升序排序的数组在预先未知的某个点上进行了旋转。   ( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。   搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。   你可以假...

dianguo4964的博客 137

leetcode-81. Search in Rotated Sorted Array II

leetcode-81. Search in Rotated Sorted Array II题目: 但是这题有可重复问题的限制。那么会出现一个问题比如说13111这样的情况,左节点右节点和中间节点都是一样的。泛化的说就是无法判断到底是左半部分和右半部分到底哪个是规则的。之所以出现这样的情况。就是因为对于平台区同时存在于左半部分和右半部分,那如何解决这个问题呢我用的方法就是当左节点和右节点相等的时候移动左或右

千念飞羽的专栏 469

乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array

乘风破浪:LeetCode真题_033_Search in Rotated Sorted Array 一、前言 将传统的问题进行一些稍微的变形,这个时候我们可能无所适从了,因此还是实践出真知,多练习多总结多思考。 二、Search in Rotated Sorted Array 2.1 问题 2.2 分析与解决 题目限制了时间复杂度为O(log(n)),刚遇到这个题...

weixin_30305735的博客 124

LeetCode(力扣)——Search in Rotated Sorted Array2 搜索旋转排序数组 python实现

题目描述: python实现Search in Rotated Sorted Array2 搜索旋转排序数组   中文:   假设按照升序排序的数组在预先未知的某个点上进行了旋转。   ( 例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。   编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回fals...

dianguo4964的博客 176

LeetCode81:Search in Rotated Sorted Array II

Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand. (i.e.,[0,0,1,2,2,5,6]might become[2,5,6,0,0,1,2]). You are given a target value to search. If found ...

卷卷萌的博客 214

Search in Rotated Sorted Array II -- LeetCode

Search in Rotated Sorted Array II -- LeetCode

qq_44910471的博客 116

leetcode Search in Rotated Sorted Array

还可以这样理解:中间元素把待搜索区间分成了两部分,两部分具有的性质是至少有一部分是有序的。 我们不妨讨论中间元素和右边界的关系(其它情况类似),因为不存在重复元素,所以它们的关系不是大于就是小于。 情况 1:nums[mid] < nums[right],当中间元素的数值严格小于右边界的数值时候 1、此时区间 [mid, right] (表示左闭右闭,下同)一定是有序的; 2、因为 target 要么在有序区间 [mid, right] 里,要么在另一个区间 [left, mid - 1] 里。 ..

weixin_45485072的博客 252

LeetCode之Search in Rotated Sorted Array二

题目:Follow up for ”Search in Rotated Sorted Array”: What if duplicates are allowed?             Would this affect the run-time complexity? How and why?             Write a function to determine if

奔跑的小河 379

LeetCode 33. Search in Rotated Sorted Array

题目描述(中等难度) 开始的时候想复杂了,其实就是一个排序好的数组,把前边的若干的个数,一起移动到末尾就行了。然后在 log (n) 下找到给定数字的下标。 总的来说,log(n),我们肯定得用二分的方法了。 解法一 参考这里-Binary-search-solution)首先我们想一下变化前,正常的升序。我们怎么找给定的数字。 我们每次只关心中间位置的值(这一点很重要),也就是上图 3 位置...

wind_liang的博客 1072
上一篇: LeetCode 之 4Sum
下一篇: LeetCode 之 Search in Rotated Sorted Array II
小菜鸟要高飞
博客等级 码龄12年 14粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值