【无标题】一起学习LeetCode热题100道(67/100)

news/2024/9/19 13:31:03/ 标签: 学习, leetcode, 算法

67.寻找旋转排序数组中的最小值(学习)

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:
若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]
若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]
注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。
给你一个元素值 互不相同 的数组 nums ,它原来是一个升序排列的数组,并按上述情形进行了多次旋转。请你找出并返回数组中的 最小元素 。
你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。

示例 1:
输入:nums = [3,4,5,1,2]
输出:1
解释:原数组为 [1,2,3,4,5] ,旋转 3 次得到输入数组。

示例 2:
输入:nums = [4,5,6,7,0,1,2]
输出:0
解释:原数组为 [0,1,2,4,5,6,7] ,旋转 3 次得到输入数组。

示例 3:
输入:nums = [11,13,15,17]
输出:11
解释:原数组为 [11,13,15,17] ,旋转 4 次得到输入数组。

提示:
n == nums.length
1 <= n <= 5000
-5000 <= nums[i] <= 5000
nums 中的所有整数 互不相同
nums 原来是一个升序排序的数组,并进行了 1 至 n 次旋转

解析:
一、初始化:
1.设置两个指针left和right,分别指向数组的开头和末尾。

二、循环条件:
1.当left < right时,继续循环。

三、计算中间索引:
1.mid = Math.floor((left + right) / 2)。

四、比较中间元素与右边界元素:
1.如果nums[mid] > nums[right],则更新left = mid + 1。
2.否则,更新right = mid(这里我们不需要right = mid - 1,因为我们要包含中间元素在搜索范围内,直到我们确定它不是最小元素)。

五、返回结果:
1.当left == right时,循环结束,left(或right)指向的就是最小元素的索引。返回nums[left]作为结果。

var findMin = function (nums) {let left = 0;let right = nums.length - 1;// 当数组未完全有序时(即左右指针不相邻)  while (left < right) {let mid = Math.floor((left + right) / 2);// 如果中间元素大于右边界元素,说明最小元素在右半部分  if (nums[mid] > nums[right]) {left = mid + 1;}// 否则,最小元素要么在中间元素本身(如果它小于右边界元素但大于左边界元素),  // 要么在左半部分(包括中间元素,如果它是数组中的最小值)  else {right = mid;}}// 当 left == right 时,循环结束,left(或 right)指向最小元素  return nums[left];
};

http://www.ppmy.cn/news/1520862.html

相关文章

【Linux修行路】进程通信——消息队列、信号量

目录 ⛳️推荐 一、消息队列 1.1 实现原理 1.2 消息队列接口 1.2.1 msgget——创建、获取一个消息队列 1.2.2 msgctl——释放消息队列、获取消息队列属性 1.2.3 msgsnd——发送数据 1.2.4 msgrcv——从消息队列中检索数据块 1.3 消息队列的指令操作 二、信号量 2.1 …

我写了个ffmpeg-spring-boot-starter 使得Java能剪辑视频!!

最近工作中在使用FFmpeg&#xff0c;加上之前写过较多的SpringBoot的Starter&#xff0c;所以干脆再写一个FFmpeg的Starter出来给大家使用。 首先我们来了解一下FFmpeg能干什么&#xff0c;FFmpeg 是一个强大的命令行工具和库集合&#xff0c;用于处理多媒体数据。它可以用来做…

【拉取Git项目到本地,知识小记,后续再改】

前提&#xff1a;Git已经安装好 https://blog.csdn.net/mukes/article/details/115693833 安装至步骤2.2.4即可 第一步创建本地项目目录 第二步获取他人提供的项目git地址或者自己在网上找的他人项目的git地址 Git 全局设置: git init git config --global user.name “ASxx”…

公寓项目(尚庭公寓笔记)

公寓项目 课程介绍项目概述移动端业务功能后台管理系统业务功能-公寓管理后台管理系统业务功能-租赁功能后台管理系统业务功能-系统管理&用户管理核心业务功能技术概述 项目开发流程项目原型数据库设计理论ER模型数据库设计流程 数据库设计实操概念模型逻辑模型公寓信息房间…

因 Mysql root 密码过于简单导致 Mysql 连接失败的解决方法

问题&#xff1a; Access denied for user ‘root’‘192.168.xx.xx’ (using password: YES) 用户“root”“192.168.xx.xx”的访问被拒绝&#xff08;使用密码&#xff1a;YES&#xff09; 解决方法&#xff1a; 1、使用root用户登录mysql&#xff0c;通过下面的命令给ro…

【云原生之kubernetes实战】k8s环境中部署Nginx服务

【云原生之kubernetes实战】k8s环境中部署Nginx服务 一、Nginx介绍1.1 Nginx简介1.2 Nginx特点1.3 Nginx使用场景二、本次实践介绍2.1 本次实践简介2.2 本次环境规划三、检查k8s环境3.1 检查工作节点状态3.2 检查系统pod状态四、部署storageclass(可选)4.1 配置NFS服务器4.2 …

XSS LABS - Level 16 过关思路

关注这个靶场的其他相关笔记&#xff1a;XSS - LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 进入靶场&#xff0c;右击页面&#xff0c;查看网页源码&#xff0c;搜索关键词 test 查看页面回显点&#xff1a; 页面只有一个回显点&#xff0c;跟前面关卡不同&am…

Spring Boot报错:没有配置数据源(url属性未设置)

文章目录 小结问题解决参考 小结 Spring Boot报错&#xff1a;没有配置数据源&#xff08;url属性未设置&#xff09;&#xff0c;进行解决。 问题 Spring Boot报错&#xff1a; ERROR 2024-08-28 17:24:43.734 [main] - *************************** APPLICATION FAILED T…

提升多跳问答中的语言模型知识编辑能力

人工智能咨询培训老师叶梓 转载标明出处 大模型在静态知识库的更新上存在局限&#xff0c;特别是在面对需要多步骤推理的多跳问题时&#xff0c;难以提供准确和最新的回答。为了解决这一问题&#xff0c;来自美国佐治亚大学、纽约大学、莱斯大学、北卡罗来纳州立大学等机构的研…

flutter 提示框2 Dialog

flutter 提示框 写在点击的方法体中 child里放自己喜欢的 showDialog( context: context, builder: (BuildContext context) { final Dialog alertDialog Dialog( backgroundColor: Colors.transparent,shadowColor:Colors.transparent,child: Container(height: mediawi…

突破视觉理解极限,Qwen2-VL重磅登场

前沿科技速递&#x1f680; 经过近一年的持续努力&#xff0c;Qwen团队宣布推出最新一代的视觉语言模型&#xff1a;Qwen2-VL。基于Qwen2的基础&#xff0c;Qwen2-VL在多个方面实现了显著提升&#xff0c;相较于前代模型Qwen-VL&#xff0c;它具备以下核心优势&#xff1a; 1. …

风塔市场研究:未来几年年复合增长率CAGR为6.4%

塔架是风力涡轮机结构中的一个重要部件。它将载荷从机舱传递到地基&#xff0c;是决定盈利能力的重要因素&#xff1a;塔架越高&#xff0c;能量输出越高。 据QYResearch调研团队最新报告“全球风塔市场报告2024-2030”显示&#xff0c;预计2030年全球风塔市场规模将达到152.9亿…

如何修复软件中的BUG

笔者上一篇博文《如何开发出一款优秀的软件》主要讲了如何开发一款优秀的软件及相应的必要条件。但对一个已上线&#xff0c;已经成型的产品&#xff0c;该如何解决存在的bug呢&#xff1f;这是本文要阐述的内容。 在这里&#xff0c;首先说一下bug的种类及bug严重程度分类&…

MATLAB 中的 reshape 函数

在 MATLAB 中&#xff0c;矩阵和数组的处理是核心任务之一&#xff0c;而 reshape 函数是进行数据重组时的一个重要工具。无论你是在进行数据分析、信号处理还是算法开发&#xff0c;reshape 都能帮助你以灵活的方式重新组织数据。本文将详细介绍 reshape 函数的使用方法、注意…

java反射获取方法参数名、参数类型

package com.hx.utils;import com.hx.bean.Student; import org.springframework.core.LocalVariableTableParameterNameDiscoverer;import java.lang.reflect.*;/*** 反射应用*/ public class MyReflect {public static void main(String[] args) { // cancelAccess();…

猴子采集:实时数据采集,正在拼采集,类目采集,整店采集

图片&#xff1a;玉溪 文章&#xff1a;云长 作者&#xff1a;yunchang227 猴子采集核心功能亮点 &#xff1a; 一&#xff1a;无限自动采集 通过先进的算法和技术&#xff0c;猴子采集可以实现无限自动采集&#xff0c;彻底解放你的双手。只需设置好相关参数&#xff0c;…

《javaEE篇》--线程池

线程池是什么 线程的诞生是因为进程创建和销毁的成本太大&#xff0c;但是也是相对而言&#xff0c;如果频繁的创建和销毁线程那么这个成本就不能忽略了。 一般有两种方法来进一步提高效率&#xff0c;一种是协程(这里不多做讨论),另一种就是线程池 假如说有一个学校食堂窗口…

MCU官方IDE软件安装及学习教程集合 — STM32CubeIDE(STM32)

简介 各MCU厂商为保证产品的市场地位以及用户体验&#xff0c;不断的完善自己的产品配套&#xff0c;搭建自己的开发生态&#xff0c;像国外ST公司&#xff0c;国内的GD&#xff08;兆易创新&#xff09;&#xff0c;AT&#xff08;雅特力&#xff09;等等。目前就开发生态而言…

数据结构(邓俊辉)学习笔记】串 10——BM_BC算法:坏字符

文章目录 1.坏字符2. 特殊情况 1.坏字符 实际上&#xff0c;刚才的实例中我们所展示的那样一个计算过程&#xff0c;就是所谓 BM 算法所采用的策略之一&#xff0c;而这一策略&#xff0c;将我们刚才所说的教训称作坏字符。 在这里&#xff0c;不妨改为基于蛮力算法的第二个版…

C++系列-STL容器的应用举例

STL容器的应用举例 [TOC](STL容器的应用举例) 临安春雨初霁》 陆游 世味年来薄似纱&#xff0c;谁令骑马客京华。 小楼一夜听春雨&#xff0c;深巷明朝卖杏花。 矮纸斜行闲作草&#xff0c;晴窗细乳戏分茶。 素衣莫起风尘叹&#xff0c;犹及清明可到家 code: /* 报道的有10个同…