力扣hot100:153. 寻找旋转排序数组中的最小值(二分的理解)

news2024/9/24 10:44:49

b9554e68da5e4cf2a5b41956e76cc017.png

        由力扣hot100:33. 搜索旋转排序数组(二分的理解)-CSDN博客,我们知道二分实际上就是找到一个策略将区间“均分”。对于旋转数组问题,在任何位置分开两个区间,如果原区间不是顺序的,分开后必然有一个区间是顺序的,一个区间是非顺序的,我们知道最小值必然是在非顺序的区间里。因此我们这里二分,目的是让区间变小使得答案在[left,right]区间里。我们需要特别注意二分中的边界条件,比如下面考虑到的,整个区间是顺序的,以及如何精确的找到非顺序区间的答案区间。

        当nums[left]>nums[mid]时,顺序的区间一定是[mid+1,right],而不是[mid,right],因此我们是right=mid,而不是right=mid-1!并且right=mid算不算二分? 实际上也是算的!只不过你可以发现问题就出现在当元素只有一个时仅仅将{left=mid,right=mid}会导致死循环,两个元素是right=mid仍然可以减小区间。然而我们这里在只有一个元素时,是可以找到答案的,因此这里仅仅right=mid也是一个可以做到二分的方法。

class Solution {
public:
    int findMin(vector<int>& nums) {//答案一定在非顺序区间里
        int left=0,right=nums.size()-1;
        while(left<=right){
            int mid=(left+right)>>1;
            if(nums[left]<=nums[mid]){//左边是顺序的
                if(nums[mid]<=nums[right]){//右边也是顺序的,说明整个区间是顺序的
                    return nums[left];
                }else{//右边不是顺序的,答案在右边哦,由于[left,mid]必定是整个区间顺序,mid必然不是答案,因此答案必然在[mid+1,right]
                    left=mid+1;
                }
            }else{//左边不是顺序的,右边[mid+1,right]一定是顺序的,因此答案必然在[left,mid]中
                right=mid;
            }
        }
        return 0;
    }
};

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539542.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[ROS 系列学习教程] rqt可视化工具箱 - Topic工具

ROS 系列学习教程(总目录) 本文目录 一、Message Publisher二、Message Type Browser三、Topic Monitor 一、Message Publisher Message Publisher 可以通过可视化界面发布topic。 启动方法&#xff1a; 在 rqt 窗口依次点击 Plugins -> Topics -> Message Publisher 启…

抖音平台热销的本腾和新讯随身WiFi,哪个更靠谱,更值得购买?

经常有粉丝朋友摆脱小编测评一下在某短视频平台上面非常火爆的两款随身WiFi&#xff0c;本腾随身WiFi和新讯随身WiFi到底哪个更好。今天&#xff0c;小编就为大家带来最真实的体验测评。 一、外观和产品 这方面新讯要比本腾做的更好&#xff0c;本腾的设备相对单一一些。新讯则…

关于Java发邮件提醒写周报实现(二)代码编写

背景 由于公司每周都要写周报&#xff0c;而日常工作很忙&#xff0c;所以很容易忘记这件事件&#xff0c;因此开发一个写周报提醒的机器人&#xff0c;进行特定时间提醒是时候写周报了。 有一个大前提&#xff0c;本技术实现&#xff0c;本着不开通任何收费服务的态度去考察使…

入门linux之Ubuntu学习

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1、介绍Ubuntu2、虚拟机目录解析3、常用指令ls&#xff1a;罗列当前目录文件信息对ls -l 的结果解析1.第一个字符2.每三个字符&#xff08;第一个字符后&#x…

服务器软件express搭建web服务器

文章目录 1.express 是什么2.路由2.1&#xff08;参数一&#xff09;读取用户的请求&#xff08;request&#xff09;2.2&#xff08;参数二&#xff09;给用户响应&#xff08;response&#xff09;2.3&#xff08;参数三&#xff09;next()函数&#xff08;传递请求到下一个处…

卡尔曼滤波跟踪自由落体的高度程序,带MATLAB例程

背景 已知一物体做自由落体运动,对其高度进行20次测量,测量值如下表:(g=9.80m/s2). 设高度的测量误差分布为: N(0, 1),该物体的初始高度h0和速度v0分布也为高斯分布,且: 试求该物体高度和速度的随时间变化的最优估计(matlab Kalman filters)。N(0, 1),该物体的初始高…

【QT入门】 Qt实现自定义信号

往期回顾&#xff1a; 【QT入门】图片查看软件(优化)-CSDN博客 【QT入门】 lambda表达式(函数)详解-CSDN博客 【QT入门】 Qt槽函数五种常用写法介绍-CSDN博客 【QT入门】 Qt实现自定义信号 一、为什么需要自定义信号 比如说现在一个小需求&#xff0c;我们想要实现跨ui通信&a…

计算机实体安全

计算机实体安全定义&#xff1a; 对场地环境、设施、设备和载体、人员采取的安全对策和措施。 一、计算机可靠性与故障分析 1.1 计算机的可靠性 可靠性 (狭义) ■计算机在规定时间与条件下完成规定功能的 概率 ■规定条件&#xff1a;环境条件&#xff0c;使用条件&#xff0…

计数质数——算法思路

题目链接&#xff1a;204. 计数质数 - 力扣&#xff08;LeetCode&#xff09; 会超时的代码&#xff1a; 使用了枚举的方法 方法一&#xff1a; public static int countPrimes(int n) {int ans1;if (n<2)return 0;for (int i3;i<n;i){boolean flagtrue;for (int j2;j&…

docker安装WireGuard服务

启动 WireGuard 如下异常 则是linux内核需要升级 $ wg-quick down wg0 $ wg-quick up wg0 Error: WireGuard exited with the error: Cannot find device "wg0" This usually means that your hosts kernel does not support WireGuard!at /app/lib/WireGuard.js:65…

【计算机毕业设计】基于ssm038框架的网上招聘系统的设计与实现lw7

基于ssm038框架的网上招聘系统的设计与实现lw7&#xff1a; 本课题是基于ssm框架&#xff08;springMVC,spring,mybatis)的招聘系统&#xff0c;是标准的MVC模式&#xff0c;将系统分为表现层、controller层、service层、DAO层四层&#xff0c;使用spring MVC负责请求的转发和视…

【Linux】从零认识进程 — 中下篇

送给大家一句话&#xff1a; 人一切的痛苦&#xff0c;本质上都是对自己无能的愤怒。而自律&#xff0c;恰恰是解决人生痛苦的根本途径。—— 王小波 从零认识进程 1 进程优先级1.1 什么是优先级1.2 为什么要有优先级1.3 Linux优先级的特点 && 查看方式1.4 其他概念 2…

【C语言】编译和链接----从源代码到可执行程序的转换【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】文件操作揭秘&#xff1a;C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 欢迎来到本篇博客&…

写作兔怎么用 #微信#其他#知识分享

写作兔是一款非常实用的论文写作工具&#xff0c;不仅具有查重和降重的功能&#xff0c;而且操作简单方便&#xff0c;使用起来非常便捷。那么&#xff0c;接下来就让我们一起来了解一下“写作兔怎么用”。 首先&#xff0c;要使用写作兔&#xff0c;你只需要在浏览器中输入写作…

背包dp模板

01背包 for (int i1; i<n; i) //物品 {for (int j1; j<V; j) //容积 { // 装得下 分为 1.装 2.不装if (j>v[i]) dp[j] max(tmp[j],tmp[j-v[i]]v[i]);else dp[j] tmp[j]; // 装不下第i个}for (int j1; j<V; j) tmp[j] dp[j]; //滚动数组 } 滚动数组 for (int …

网络安全知识核心之TCP与UDP区别

TCP 面向连接&#xff08;如打电话要先拨号建立连接&#xff09;提供可靠的服务;UDP 是无连接的&#xff0c;即发送数据之前不需要建立连接&#xff0c;;UDP 尽最大努力交付&#xff0c;即不保证可靠交付。&#xff08;由于 UDP 无需建立连接&#xff0c;因此 UDP 不会引入建立…

【漏洞复现】科立讯通信指挥调度平台editemedia.php sql注入漏洞

漏洞描述 在20240318之前的福建科立讯通信指挥调度平台中发现了一个漏洞。该漏洞被归类为关键级别,影响文件/api/client/editemedia.php的未知部分。通过操纵参数number/enterprise_uuid可导致SQL注入。攻击可能会远程发起。 免责声明 技术文章仅供参考,任何个人和组织使…

2024年全球生成人工智能全景图【中文】

2024年全球生成人工智能全景图【中文】 在过去的一年中&#xff0c;产生式人工智能&#xff08;GenAI&#xff09;无疑成为了全球各行各业的热门话题。特别是ChatGPT的发布&#xff0c;激发了公众对GenAI强烈的兴趣和激动&#xff0c;唤醒了我们对其变革潜力的认知。 虽然我们…

算法系列--动态规划--回文子串系列

&#x1f495;"我们好像在池塘的水底&#xff0c;从一个月亮走向另一个月亮。。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–回文子串系列 今天为大家带来的是算法系列--动态规划--回文子串系列(1),本文重点掌握如何快速判…

树,二叉树与堆

这里写目录标题 树树的概念树的相关概念树的表示 二叉树二叉树的概念满二叉树与完全二叉树二叉树的重要性质二叉树的存储结构 堆二叉树的顺序存储堆的概念堆的实现堆插入和删除数据 树 树的概念 树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08…