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

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.mzph.cn/news/765963.shtml

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

相关文章

BRAM底层原理详细解释(1)

目录 一、原语 二、端口简述 2.1 端口简介 2.2 SDP端口映射 三、端口信号含义补充说明 3.1 字节写使能&#xff08;Byte-Write Enable&#xff09;- WEA and WEBWE&#xff1a; 3.2 地址总线—ADDRARDADDR and ADDRBWRADDR 3.3 数据总线—DIADI, DIPADIP, DIBDI, and D…

【c++初阶】C++入门(下)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

AI元年,这5款AI写作能为你提供帮助

自从人工智能技术的迅猛发展以来&#xff0c;AI在各个领域都取得了巨大的进步。其中&#xff0c;AI写作工具成为越来越多人关注的焦点。在这个AI元年&#xff0c;小编想向大家分享5款可能对你有帮助的AI写作工具&#xff0c;如果你也想找AI写作相关的工具&#xff0c;那么来看看…

【数据结构基础】之八大排序(C语言实现)

【数据结构基础】之八大排序(C语言实现&#xff09; &#x1f427; 冒泡排序♈️ 冒泡排序原理及代码实现♈️ 稳定性分析 &#x1f427; 选择排序♈️ 选择排序原理及代码实现♈️ 稳定性分析 &#x1f427; 插入排序♈️ 插入排序的原理及代码实现♈️ 稳定性分析 &#x1f4…

《单例模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式&#xff08;极简c版&#xff09;》-CSDN博客 本章简要说明单例模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明 方案&#xff1a; 单例模式确保一个类只有一个实例&#xff0c;并提供一个全局访问点。优点&…

素数问题 python

# 输出1-100所有质数 import math count 0 for i in range(2, 101):is_prime True # 假设当前数是素数for j in range(2, int(math.sqrt(i))1):if i % j 0:is_prime False # 如果能被整除&#xff0c;不是素数break # 直接中断内层循环if is_prime:count 1print(i)prin…

(附源码)基于Spring Boot和Vue的智能订餐与外卖系统设计与实现

1. 引言 这部分通常包含了研究背景、研究意义、国内外研究现状、本文研究内容以及论文结构安排。 研究背景&#xff1a;介绍当前外卖市场的快速发展&#xff0c;以及智能订餐系统对改善人们生活的影响。研究意义&#xff1a;强调这类系统在现代生活中的作用和开发的创新点。国…

Kubernetes一文上手【手把手系列】

目录 Kubernetes前言部署方式的演变 K8S概述K8S架构Master节点1. API Server2. Etcd3. Controller Manager4. Scheduler Node节点1. kubelet2. kube-proxy3. 容器运行时 组件与插件1. Kubernetes DNS2. Dashboard3. Heapster4. Ingress Controller K8S核心概念PodSerivceNamesp…

CodeSys创建自定义的html5控件

文章目录 背景创建html5control.xml文件控件界面以及逻辑的实现使用的资源安装自定义的html5控件库 背景 查看官方的资料&#xff1a;https://content.helpme-codesys.com/en/CODESYS%20Visualization/_visu_html5_dev.html 官方的例子&#xff1a;https://forge.codesys.com/…

使用 PyOpenGL 进行 2D 图形渲染总结

一、说明 OpenGL是一个广泛使用的开放式跨平台实时 3D 图形库&#xff0c;开发于二十多年前。它提供了一个低级API&#xff0c;允许开发人员以统一的方式访问图形硬件。在开发需要硬件加速且需要在不同平台上运行的复杂 2D 或 3D 应用程序时&#xff0c;它是首选平台。它可以在…

liunx centos7 下通过yum删除安装已经安装的php

执行下面命令查看php相关的包 rpm -qa | grep php 只需要卸载几个名为common的包即可&#xff0c;其他同版本依赖会被全部删除&#xff0c;删除php71w-common&#xff0c;71w版本的依赖包全部会被删除。 查看php包的命令 rpm -qa | grep php 或 yum list installed | gre…

unity编辑器扩展高级用法

在PropertyDrawer中&#xff0c;您不能使用来自GUILayout或EditorGUILayout的自动布局API&#xff0c;而只能使用来自GUI和EditorGUI的绝对Rect API始终传递相应的起始位置和维度。 你需要 计算显示嵌套内容所需的总高度将此高度添加到public override float GetPropertyHeig…

实用工具推荐:适用于 TypeScript 网络爬取的常用爬虫框架与库

随着互联网的迅猛发展&#xff0c;网络爬虫在信息收集、数据分析等领域扮演着重要角色。而在当前的技术环境下&#xff0c;使用TypeScript编写网络爬虫程序成为越来越流行的选择。TypeScript作为JavaScript的超集&#xff0c;通过类型检查和面向对象的特性&#xff0c;提高了代…

uniapp ios端使用fixed定位导致输入时页面滚动简单解决方法

当移动端使用fixed定位自定义nav栏时&#xff0c;安卓端正常固定在可视窗顶部&#xff0c;但是ios端当有input输入&#xff0c;弹出软键盘时&#xff0c;会将nav顶出可视区&#xff0c;因为在ios上&#xff0c;不是相对于浏览器窗口定位的&#xff0c;而是相对于最近的可滚动区…

Vue常用指令介绍

Vue指令&#xff1a; 指令带有前缀 v- 开头&#xff0c;以表示它们是 Vue 提供的特殊属性。 v-text&#xff0c;v-html&#xff1a; html&#xff1a; <div id"ddd"><!-- {{插值表达插入变量&#xff0c;不会覆盖标签体中的内容}}v-text,v-html会覆盖掉标…

Linux :环境基础开发工具

目录: 1. Linux 软件包管理器 yum 1. 什么是软件包 2. 查看软件包 3. 如何安装软件 4. 如何卸载软件 2. Linux开发工具 1. Linux编辑器-vim的基本概念 2. vim使用 3. vim的基本操作 4. vim正常模式命令集 5. vim末行模式命令集 6. 简单vim配置 3. Linux编译器-gcc/…

博世全球首个高阶智能驾驶项目量产 ,由腾讯云提供专有云支持

近日&#xff0c;博世全球首个高阶智能驾驶项目——奇瑞星途星纪元项目成功量产。在奇瑞星途星纪元ES最新向用户推送的OTA内容中&#xff0c;NEP高速领航系统正式上线。该系统采用全新人机共驾策略&#xff0c;可实现高速端到端的自动驾驶。 该系统由博世智能驾驶与控制系统事…

常用相似度计算方法总总结

一、欧几里得相似度 1、欧几里得相似度 公式如下所示&#xff1a; 2、自定义代码实现 import numpy as np def EuclideanDistance(x, y):import numpy as npx np.array(x)y np.array(y)return np.sqrt(np.sum(np.square(x-y)))# 示例数据 # 用户1 的A B C D E商品数据 [3.3…

缓存知识回顾

- 缓存的使用场景 系统查询性能较低&#xff0c;且对数据实时性要求不高的 - 两种常见的缓存 本地缓存&#xff1a; java中的Map、List 的确这种方式简单有效&#xff0c;但是带来的弊端就是过于简单&#xff0c;功能也就过于缺乏&#xff0c;而且如果使用不当&#xff0c;将带…

知识管理软件那么多,怎么挑选才适合初创企业?

对于初创企业来说&#xff0c;资源有限&#xff0c;效率显得尤其重要。此时&#xff0c;一个强大的知识管理软件就显得必不可少。它不仅利于信息的录入、查找和共享&#xff0c;还可以帮助团队更好的组织和协作&#xff0c;提高工作效率。那么&#xff0c;在众多的知识管理软件…