Leetcode81. 搜索旋转排序数组 II

Java实现 LeetCode 81 搜索旋转排序数组 II(二) 81. 搜索旋转排序数组 II 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 示例 1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例 2: 输... 阅读详情

Every day a Leetcode

题目来源:81. 搜索旋转排序数组 II

解法1:二分查找

即使数组被旋转过,我们仍然可以利用这个数组的递增性,使用二分查找。

对于当前的中点,如果它指向的值小于等于右端,那么说明右区间是排好序的;反之,那么说明左区间是排好序的。

如果目标值位于排好序的区间内,我们可以对这个区间继续二分查找;反之,我们对于另一半区间继续二分查找。

代码:

/*
 * @lc app=leetcode.cn id=81 lang=cpp
 *
 * [81] 搜索旋转排序数组 II
 */

// @lc code=start
class Solution
{
public:
    bool search(vector<int> &nums, int target)
    {
        int n = nums.size();
        int left = 0, right = n - 1;
        while (left <= right)
        {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target)
                return true;
            if (nums[left] == nums[mid])
            {
                // 无法判断哪个区间是增序的
                left++;
            }
            else if (nums[right] == nums[mid])
            {
                // 无法判断哪个区间是增序的
                right--;
            }
            else 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 false;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(n),其中 n 是数组 nums 的长度。最坏情况下数组元素均相等且不为 target,我们需要访问所有位置才能得出结果。

空间复杂度:O(1)。

【中等】力扣算法题解析LeetCode81:搜索旋转排序数组 II 题目要求在旋转后的非降序数组中查找目标值,数组可能包含重复元素。核心思路是二分查找,但需处理重复元素干扰。通过判断有序区间(左半或右半)并调整搜索范围,时间复杂度最优为 O(log n),最坏情况(全重复)为 O(n)。代码实现中处理了重复元素,确保正确缩小搜索范围。示例输入验证了算法的正确性,如 nums = [2,5,6,0,0,1,2] 查找 target = 0 返回 true,查找 3 则返回 false。 阅读详情

相关推荐

Python自动化监控:实时捕捉LOF基金溢价套利机会并微信预警

本文详细介绍了如何使用Python构建一个自动化监控系统,实时捕捉LOF基金的溢价套利机会。通过AKShare获取基金数据,结合雪球API计算实时溢价率,并利用企业微信API实现微信推送预警,帮助投资者高效、自动地发现并抓住转瞬即逝的套利机会。

weixin_28327051的博客 526

LeetCode第81题_搜索旋转排序数组II

已知存在一个按非降序排列的整数数组nums,数组中的值不必互不相同。在传递给函数之前,nums在预先未知的某个下标k)上进行了旋转,使数组变为(下标从 0 开始计数)。例如,在下标5处经旋转后可能变为。给你旋转后的数组nums和一个整数target,请你编写一个函数来判断给定的目标值是否存在于数组中。如果nums中存在这个目标值target,则返回true,否则返回false。你必须尽可能减少整个操作步骤。

qq_40263592的博客 1152

亿图图示(edrawmax中文版) v10.1.7pjb

edrawmax中文名叫做亿图图示,是一款非常棒的综合图形图表设计软件,既能实现流程图、架构图、工程图、思维导图等数百种专业领域图形图表的绘制,又能提供一个白板进行头脑风暴和任意编排,轻松实现数据和创意的可视化呈现。软件支持Windows、Mac、Linux及网络版,一端创作,多端同步,从而为跨端办公绘图提供新的解决方案,还兼容常用文档类的办公软件格式,包括图片、Office、PDF、Visio、Html、SVG等,尽可能的在文件格式这块满足用户多方面需求。软件支持创建260多种图表类型,拥有超过12500

qq_43293214的博客 1万+

LeetCode 力扣 81. 搜索旋转排序数组 II

题目描述(中等难度) 33题的升级版,数组的操作没有变,所谓的旋转数组,就是把有序数组前边若干个数字移动到末尾。区别在于这道题出现了重复的数字,同样是找 target。 解法一 把数组遍历一遍,然后依次判断数字是否相等的解法,当然就不用说了。这里直接在33 题解法三的基础上去修改。33 题算法基于一个事实,数组从任意位置劈开后,至少有一半是有序的,什么意思呢? 比如 [ 4 5 6 7 1 2 ...

wind_liang的博客 884

EETI_eGTouch驱动移植及校准

一.环境 芯片:NXP IMX6Q 内核版本:4.1.15 uname:Linux myimx6ek314 4.1.15-myimx6-g5d588fa6-dirty #4 SMP PREEMPT Tue Nov 17 17:26:34 CST 2020 armv7l armv7l armv7l GNU/Linux 二.官方《EETI_eGTouch_Linux_Programming_Guide_v2.5l.pdf》文档勘误 HID_MULTITOUCH =Y or N(官方文档设置为M): 正确设置H

Garden的博客 4338

Leetcode 81. Search in Rotated Sorted Array II 搜索旋转排序数组 II

Leetcode 81. Search in Rotated Sorted Array II 搜索旋转排序数组 II 标签: Leetcode 题目地址: https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/ 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1...

CoderWangSon 245

企业级大数据平台的数据网格(Data Mesh)转型之路

随着企业数字化转型的深入,传统大数据平台面临数据孤岛化、治理成本高、业务响应慢等核心痛点。数据网格作为一种新兴的分布式数据管理架构,通过领域驱动设计(DDD)、数据产品化和联邦治理模式,为企业提供了打破数据壁垒、提升数据生产力的全新路径。本文聚焦企业级数据平台从传统架构(数据湖/数据仓库)向数据网格转型的关键技术、实施步骤和组织配套,涵盖技术架构设计、核心算法实现、项目实战案例及工具链推荐。背景介绍:定义转型目标、术语体系与核心挑战核心概念与联系:解析数据网格四大支柱及技术架构图谱核心算法原理。

AI 领航者的博客 1084

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

81.搜索旋转排序数组II81.搜索旋转排序数组II题解代码 81.搜索旋转排序数组II 81.搜索旋转排序数组II 题解 在上一题的基础上去重即可 代码 package main func search(nums []int, target int) bool { left, right := 0, len(nums)-1 for left+1 < right { for left < right && nums[left] == nums[left+1] {

清风 402

【Ranger】mac下Apache Ranger编译安装

a、编译过程中出现测试用例不通过和文件认证错误错误:带上参数-DskipTests=true -Drat.skip=true 重新编译;b、若编译过程中出现缺少jar包的情况,可能下载不了,需要手动自动添加;c、编译所需的其他工具如maven等安装配置略。采用这个会报错,因此我才用了下面一个命令。初始化设置Ranger Admin:执行。然后进入target目录。

九师兄 2108

使用 MATLAB/Simulink + Communications Toolbox + 5G Toolbox,构建一个2×2 MIMO-OFDM通信系统

本文通过Simulink+CommunicationsToolbox构建2×2 MIMO-OFDM通信系统,重点实现信道均衡滤波器(ZF与MMSE)的设计与应用。详细介绍了系统架构、建模步骤(包括信道估计、均衡器实现)和仿真场景设计,通过BER、星座图和EVM对比分析验证了MMSE均衡器在抑制噪声和信号恢复方面的优势。文章总结了MIMO均衡的核心原理与实践经验,并提出了扩展至大规模MIMO、深度学习均衡器等优化方向,为无线通信系统设计提供实用指导。

amy_mhd的博客 128

leetcode 81. 搜索旋转排序数组 II

''' 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 (例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 其中,在原始的数组中可能包含重复的元素 ''' class Solution: def search(self, nums, targ...

WYXHAHAHA123的博客 143

GeoXCP:可解释人工智能中空间解释的不确定性量化

GeoXCP: uncertainty quantification of spatial explanations in explainable AI提出基于保形预测(conformal prediction)的不确定性量化框架——地理空间解释保形预测(GeoXCP),将空间依赖纳入建模过程,生成具有校准不确定性估计的空间自适应解释。通过大量模拟实验和真实世界数据集验证,GeoXCP在不同地理空间场景中能提供可靠解释并有效量化不确定性,推动可解释地理空间机器学习的发展,帮助决策者评估模型驱动洞察的可信度。

May the Force be with you 244

Python描述 LeetCode 81. 搜索旋转排序数组 II

Python描述 LeetCode 81. 搜索旋转排序数组 II   大家好,我叫亓官劼(qí guān jié ),在GitHub & 优快云中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在GitHub & 优快云中写博客,唯一博客更新的地址为:亓官劼的博客 ,近期将逐渐同步刷题相关记录到GitHub:[Algorithmic-learning-records] (https://github.com/qiguanjie/Algorithmic-learning-r

一起加油 1250

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

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

81. 搜索旋转排序数组 II - 力扣(LeetCode)

题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 示例 1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例 2: 输入: nums = [...

Onwaier的博客 451

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Leetcode 81. 搜索旋转排序数组 II C++

Leetcode 81. 搜索旋转排序数组 II 题目 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 测试样例 1. 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 2. 输入: nums = [2,5,6,0,0,1,2], target = 3 输出: fa

weixin_43750513的博客 303

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

LeetCode 81. 搜索旋转排序数组 II

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 81. 搜索旋转排序数组 II,做好准备了么,那么开始吧。 🌲🌲🐴🐴 二分查找 与以往不同的是,此题数组中的值不必互不相同,而且数组部分有序,故我们需要多添加条件来解题。

weixin_62275996的博客 722

利用python 完成leetcode81 搜索旋转排序数组 II

假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 示例 1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例 2: 输入: nums = [2,5,6...

找到工作之前一天十篇的博客 376

【LeetCode: 81. 搜索旋转排序数组 II + 二分查找】

【LeetCode: 81. 搜索旋转排序数组 II + 二分查找】已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。给你 旋转后 的数组 nums 和一个整数 target ,请你编写一个函数来判断给定的目标值是否存在于数组中。如果 nums 中存在这个目标值 target ,则返回 true ,否则返回 false 。

Coder_ljw的博客 1369

Leetcode—81. 搜索旋转排序数组 II【中等】

运行结果 之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

Atticus的博客 629

leetcode 81. 搜索旋转排序数组 II medium

leetcode81. 搜索旋转排序数组 II medium 题目描述: 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组[0,0,1,2,2,5,6]可能变为[2,5,6,0,0,1,2])。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回true,否则返回false。 示例1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例2: 输入: nums = [2,5,6...

speargod的博客 213

leetcode81.搜索旋转排序数组 II

https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。 编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true,否则返回 false。 示例 1: 输入: ...

ShawDa's Blog 1650

Leetcode 81. 搜索旋转排序数组 II

对于这种情况,我们只能将当前二分区间的左边界加一,右边界减一,然后在新区间上继续二分查找。对于数组中有重复元素的情况,二分查找时可能会有。这题的不同在于有重复元素,需要多一步操作。,首次二分时无法判断区间。

JehanRio's Private Blog 212

LeetCode81. 搜索旋转排序数组 II

LeetCode81. 搜索旋转排序数组 II 文章目录题目描述一、解题关键词二、解题报告1.思路分析2.时间复杂度3.代码示例2.知识点总结 题目描述 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], ..., nums[n-1], nums[0], nums[1], ..., nums[k-1]](下

Datao_csdn的博客 386

力扣(LeetCode)81. 搜索旋转排序数组 II(C++)

【墨染】线性探测+二分查找

墨染 578
上一篇: Leetcode34. 在排序数组中查找元素的第一个和最后一个位置
下一篇: Leetcode154. 寻找旋转排序数组中的最小值 II
UestcXiye
博客等级 码龄8年 9032粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值