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

LeetCode 第81题:搜索旋转排序数组 II 通过上述详细的解析和多种解法的对比,相信大家对LeetCode第81题的解法有了深入的理解。本文介绍了线性搜索法、二分查找法和改进的二分查找法,每一种方法都有其优缺点。线性搜索法虽然简单直接,但效率较低;二分查找法利用了数组的有序特性,提高了搜索效率;改进的二分查找法在处理数组中存在重复元素的情况下更加鲁棒。希望大家能够根据具体情况选择合适的解法,并灵活应用到其他类似的搜索问题中。最后,希望大家在刷题的过程中,不断总结,不断进步。祝大家都能在算法的道路上走得更远! 阅读详情

leetcode 81. 搜索旋转排序数组 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,0,0,1,2], target = 3
输出: false

解题思路:

思路一: leetcode抄的,因为觉得这题没意思,套不上那两二分模板,得用第3个模板

//每次二分,左半部分和右半部分至少有一边是有序的,以此为条件可以分成两种情况:
//1、左半边是有序的
//(1) target落在左半边
//(2) otherwise
//2、右半边是有序的
//(1) target落在右半边
//(2) otherwise
//综上所述,一共两种可能性,这两种情况各自又有两种可能性

思路二: 先用154的方法,找到最小值,然后二分。

代码:

// 删除前半段
class Solution {
public:
    bool search(vector<int>& nums, int target) {
        if (nums.empty())
            return -1;
        
        int l = 0, r = nums.size()-1;
        // 删除重复这一段
        while (r>l && nums[r] == nums[l])
            r--;
        if (r==l) // 意思就是全数组都是重复元素, 这个判断条件等价于 nums[r] == nums[l] 
            return nums[l] == target;
        // 说明旋转了, 那先找到旋转点, 判断在哪个半区
        if (nums[l] > nums[r]) {
            while(l < r){
                int mid = l+(r-l) /2;
                if (nums[mid] < nums[0])
                    r = mid;
                else
                    l = mid + 1;
            }
            if (target < nums[0])
                r = nums.size()-1;
            else{
                l = 0;
                r--;
            }
        }

        while (l<r){
            int mid = l+(r-l) /2;
            if (nums[mid] >= target)
                r = mid;
            else
                l = mid+1;
        }

        return nums[l] == target;
    }
};



// 删除前半段
class Solution {
public:
    bool search(vector<int>& nums, int target) {

        int l = 0, r = nums.size() - 1;
        // 有旋转, 则确定在哪个半边
        if (nums[0] >= nums.back())
        {
            int last = nums.back();
            // 先去重复元素
            while (l < r && nums[l] == last)
                l++;
            
            // 找到旋转点  也就是最小的那个元素
            while (l < r)
            {
                int mid = l + (r-l) /2;
                if (nums[mid] <= last)
                    r = mid;
                else
                    l = mid + 1;
            }

            // 确定在哪个半区
            if (target <= nums.back())
                r = nums.size() -1;
            else
            {
                l = 0;
                r--;
            }

        }

        while (l < r)
        {
            int mid = l + (r-l) /2;
            if (nums[mid] >= target)
                r = mid;
            else
                l = mid + 1;
        }

        return nums[l] == target;


    }
};
【异常】OpenClaw网关仪表盘 pairing required 报错排查与解决方案 在OpenClaw网关仪表盘页面,完成WebSocket URL、网关令牌等必填项配置后,点击「连接」按钮尝试建立网关连接时,页面下方出现红色报错提示框,核心报错内容为,无法完成网关连接建立,且该报错在令牌配置正确、网络链路通畅的场景下仍会触发。该报错常见于非本地回环地址的访问场景,包括局域网远程访问、公网域名/IP访问、云服务器部署的网关远程管理等场景,本地127.0.0.1回环地址访问通常可正常连接。 阅读详情

相关推荐

新卡尝鲜记:RTX 5070Ti适配PyTorch生态的实战避坑指南

本文分享了RTX 5070Ti适配PyTorch生态的实战经验。针对CUDA 12.8兼容性问题,详细介绍了安装PyTorch Nightly版本、手动编译xformers库以及寻找PyTorch3D第三方预编译包的完整流程与解决方案,帮助用户快速搭建可用的深度学习开发环境。

weixin_29094775的博客 287

Leetcode刷题记录81-90,python语言

如果左半段有序,则判断目标值是否在左半段范围内,若在,则将右指针移到中间元素左侧,否则将左指针移到中间元素右侧。如果右半段有序,则判断目标值是否在右半段范围内,若在,则将左指针移到中间元素右侧,否则将右指针移到中间元素左侧。如果左、中、右三个位置的元素值相等,则无法确定哪一部分是有序的,此时将左指针右移、右指针左移,缩小搜索范围。循环结束后,返回虚拟头节点dummy的下一个节点,即为去除重复节点后的新链表的头节点。在循环中,若当前节点的值等于下一个节点的值,则开始遍历直到找到不重复的节点。

yuyu12prince的博客 407

探索Python融合地学:一文解决osgeo库安装失败问题

总结一下,要安装osgeo模块,关键在GDAL依赖库的安装,如果能够顺利安装GDAL依赖库,因其是osego的模块,因此osgeo的部分模块也能够得到自动安装,此时再运行代码,发现代码并不报错,能够正常运行了。第一步,我们要安装imagecodecs库,它支持多种常见的图像格式,当然也包含我们的目标tif格式,为方便后续的图像处理和安装osgeo模块,先安装此库。目前GDAL已经更新到了3.10版本,这里主要看你的Python版本是上面,小编用的是Python3.13,电脑是64位的,因此,我们选择。

Promising_GEO的博客 5460

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

在传递给函数之前,nums 在预先未知的某个下标 k(0

LouHerGetUp的博客 201

【BigWorld 游戏服务器引擎】Cell 架构设计介绍,及Java实现方案的探索

横向扩展(Scalability):通过动态增减CellApp和BaseApp的数量,可以轻松应对玩家人数的变化。世界可以做得非常大,只需增加更多的 Cell。负载分离(Load Separation):将不同性质的负载分离,避免了单一进程瓶颈。CPU 密集型的实时计算(CellApp)和 I/O 密集型的数据操作(BaseApp)互不影响。高效的视野管理(AOI):每个 Cell 只关心自己区域内和边界上的实体,大大降低了计算复杂度。容错性:某个CellApp。

代码时光 1203

化工热力学软件:Aspen Plus二次开发_(9).过程控制与动态模拟v1

Aspen Plus 提供了丰富的过程控制工具和方法,可以用于静态和动态过程的模拟和控制策略的开发。通过控制回路设计、动态模拟、优化工具和数据交换接口,用户可以设计和优化各种复杂的控制策略,提高化工生产的稳定性和效率。此外,结合外部软件(如MATLAB、Simulink、LabVIEW等),可以实现更高级的控制策略,如自适应控制和模型预测控制,进一步提升过程控制的精度和灵活性。希望本文的内容能帮助用户更好地理解和应用Aspen Plus中的过程控制功能。

kkchenjj的博客 402

Leetcode(81)——搜索旋转排序数组 II

Leetcode(81)——搜索旋转排序数组 II

KCDCY的博客 414

在 SAP GUI 里开发与调用 Adobe PDF 表单:SFP 建模 + Driver Program 调用的全流程实战

本文介绍了在SAP系统中使用Adobe PDF表单的完整流程。重点阐述了SAP Interactive Forms相比传统表单工具的优势,特别是在处理复杂排版、条码和交互式字段时的适用性。文章详细说明了开发流程:从安装设计工具Adobe LiveCycle Designer开始,到在SFP事务码中创建Interface和Form的数据模型,再到编写驱动程序的ABAP代码实现PDF输出。特别强调了Interface作为数据契约的重要性,以及如何通过分层设计实现前后端分离开发。最后提供了标准调用链的示例代码,展

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

LeetCode 题目 81:搜索旋转排序数组 II

多种算法详解 LeetCode 题目 81:搜索旋转排序数组 II

10年数据\经营分析经验,现任大厂数据分析负责人 832

【论文翻译】YOLO26: KEY ARCHITECTURAL ENHANCEMENTS AND PERFORMANCE BENCHMARKING FOR REAL-TIME OBJECT DETEC

本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其在实时边缘目标检测领域的关键架构改进与性能基准测试结果。YOLO26于2025年9月发布,是YOLO系列中最新、最先进的模型,专为在边缘设备和低功耗设备上实现高效能、高精度和部署就绪性而设计。论文依次详细介绍了YOLO26的架构创新,包括移除分布焦点损失(DFL)、采用端到端无非极大值抑制(NMS)推理、集成渐进式损失(ProgLoss)和小目标感知标签分配(STAL),以及引入MuSGD优化器以实现稳定收敛。

Limiiiing的博客 1679

uniapp [全端兼容] - 实现连接蓝牙电子秤+监听数据转换并实时返回示例代码,uniApp实现BLE蓝牙连接多个电子秤设备、蓝牙通讯协议对接详细教程(全平台兼容H5、微信小程序、苹果安卓App)

uniapp连接蓝牙电子秤,uniapp如何连接电子秤蓝牙,蓝牙称重,实现监听数据转换并实时返回,多蓝牙,uni-app电子秤16进制蓝牙通讯协议对接,uniapp微信小程序蓝牙获取电子秤的值,uniapp蓝牙称重电子秤,蓝牙电子秤硬件,APP端连接蓝牙秤获取重量实时显示在页面上蓝牙秤,插件组件,蓝牙连接失败,uniapp安卓苹果ios连接蓝牙电子秤没反应,uniapp微信小程序 蓝牙低功耗连接发送数据监听接收,uni-app小程序蓝牙连接、读写数据全过程,uniapp连接蓝牙体脂秤,蓝牙搜索不到怎么办,如

🏆 前端领域优质创作者 1万+

【LeetCode】81. 搜索旋转排序数组II(Medium)

81. 搜索旋转排序数组II·search-in-rotated-sorted-array-ii 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 (例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。 示例 1: 输入: nums = [2,5,6,0,0,1,2], target = 0 输出: true 示例2: 输入: nums = [2,5,6,0,0,1,...

It’s All Uphill From Here 357

Python经典编程习题100例:第32例:相反顺序输出列表

不要自卑,去提升实力 互联网行业谁技术牛谁是爹 如果文章可以带给你能量,那是最好的事!请相信自己 加油o~ 本人初学Python,只为熟悉语法编写,大神请勿理会 点击下面链接 Python经典编程100例习题汇总 题目描述: 按相反的顺序输出列表的值。 解题思路: > 利用reverse函数逆序 代码: arr=['f','g','e','b'] print(arr) arr.reverse() print(arr) ...

优快云 精品推荐 1416

LeetCode 81. 搜索旋转排序数组 II 二分/medium

文章目录1.Description2.Example3.Solution1.如果数组中数字不重复的话2.如果数组中数字重复的话 1.Description 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。 在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从

押切徹的博客 176

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

[二分法]leetcode81:搜索旋转排序数组 II (medium)

题目: 题解: 二分法 本题与旋转螺旋数组的区别在于nums可能存在重复元素,所以我们需要去重后再使用标准的二分法框架。nums[mid]>=nums[left]表示左半部分有序,我们需要在左半部分寻找target,这里分为两种情况,第一种target落在左半边,第二种在左半部分没有找到target,就需要在右半部分寻找。同理nums[mid]<=num[right]表示右半部分...

algsup 510

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode 33. 【找 target】搜索旋转排序数组 / 81. 搜索旋转排序数组 II(Medium)

【题目链接】 题解 搜索旋转排序数组 思路 代码 class Solution: ### 1228 二分法(40 ms,15.2 MB) def search(self, nums: List[int], target: int) -> int: # 若为空数组,直接返回-1 if not nums: return -1 # 初始化左、右边界 l, r = 0, len(nums)-1 # 当左.

newCraftsman的博客 313

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

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

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

qq_41829337的博客 150

【LeetCode】 81. Search in Rotated Sorted Array II 搜索旋转排序数组 II(Medium)(JAVA)

【LeetCode】 81. Search in Rotated Sorted Array II 搜索旋转排序数组 II(Medium)(JAVA) 题目地址: https://leetcode.com/problems/search-in-rotated-sorted-array-ii/ 题目描述: Suppose an array sorted in ascending order is ro...

qq_16927853的博客 252

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

Leetcode笔记目录 81. 搜索旋转排序数组 II MediumLeetcode笔记目录一、题目描述二、解题过程1.思想2.代码三、总结 一、题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [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

zhuiguang3494的博客 193

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

“从0开始做LeetCode”之第九题   tag:二分查找——先找有序区间 难度: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,0,0,1,

清崎教练 188

JAVA刷Leecode-二分查找- 搜索旋转排序数组 II( 81)

JAVA刷Leecode-二分查找- 搜索旋转排序数组 II( 81)算法思想内容分类搜索旋转排序数组 II( 81,medium)题目描述输入输出样例示例1示例2解题思路1:题解1资源学习 算法思想 二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复杂度为 O(logn)。 二分查找也可以看作双指针的一种特殊情况,但我们一般会将二者区分。双指针类型的题,指针通常是一步一步移动的,而在二

水鱼的博客 405

【LeetCode】解题81:Search in Rotated Sorted Array II

LeetCode解题 81:Search in Rotated Sorted Array II Problem 81: Search in Rotated Sorted Array II [Medium]解题思路Solution (Java) Problem 81: Search in Rotated Sorted Array II [Medium] Suppose an array sorted...

Fayedily的博客 255

leetcode 81.搜索旋转排序数组|| - 难度中等

java script版 - leetcode 81.搜索旋转排序数组|| - 难度中等(部分二分查找)

cjn1997的博客 186

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

主页有其他数据结构内容(持续更新中)

m0_56728976的博客 1219

LeetCode(81): 搜索旋转排序数组 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 输出...

weixin_30408309的博客 266

【LeetCode】153. 寻找旋转排序数组中的最小值(Medium)

153. 寻找旋转排序数组中的最小值·find_minimum_in_rotated_sorted_array 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组[0,1,2,4,5,6,7] 可能变为[4,5,6,7,0,1,2])。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。 示例 1: 输入: [3,4,5,1,2] 输出: 1 示例 2: 输入: [4,5,6,7,0,1,2] 输出: 0 参考题解:https://leetcode-c...

It’s All Uphill From Here 348
上一篇: 刷题(10)-单调栈和单调队列
下一篇: leetcode 426. 将二叉搜索树转化为排序的双向链表 medium
earlene_wyl
博客等级 码龄9年 40粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值