Leetcode-每日一题【剑指 Offer 11. 旋转数组的最小数字】

news2024/12/23 3:07:55

题目

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。  

注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。

示例 1:

输入:numbers = [3,4,5,1,2]
输出:1


示例 2:

输入:numbers = [2,2,2,0,1]
输出:0

提示:

  • n == numbers.length
  • 1 <= n <= 5000
  • -5000 <= numbers[i] <= 5000
  • numbers 原来是一个升序排序的数组,并进行了 1 至 n 次旋转

解题思路

1.题目要求我们返回旋转数组的最小元素,我们可以使用二分查找找到旋转排序数组中的最小元素。

2.首先初始化两个指针`left`和`right`,它们分别表示数组的起始和结束索引。在while循环内部,它检查`left`索引处的元素是否小于`right`索引处的元素。如果是,则意味着数组已经按升序排序,最小元素位于`left`索引处。因此,它返回`left`索引处的元素。如果数组未排序,则计算`mid`索引为`left`和`right`的平均值。

3.然后,它将`mid`索引处的元素与`left`索引处的元素进行比较。如果`mid`索引处的元素大于`left`索引处的元素,则意味着最小元素位于数组的右半部分。因此,它将`left`指针更新为`mid + 1`。如果`mid`索引处的元素小于`left`索引处的元素,则意味着最小元素位于数组的左半部分。因此,它将`right`指针更新为`mid`。如果`mid`索引处的元素等于`left`索引处的元素,则意味着数组中存在重复元素。在这种情况下,它将`left`指针增加1。

4.循环继续,直到`left`指针小于`right`指针为止。此时,`left`指针将指向数组中的最小元素,并返回`left`索引处的元素。如果循环退出时仍未找到最小元素,则意味着数组已经按升序排序,最小元素位于`left`索引处。因此,它返回`left`索引处的元素。

代码实现

class Solution {
    public int minArray(int[] numbers) {
        int left = 0;
        int right = numbers.length - 1;
        while(left < right){
            if(numbers[left] < numbers[right]){
                return numbers[left];
            }
            int mid = (left + right) / 2;
            if(numbers[mid] > numbers[left]){
                left = mid + 1;
            }else if(numbers[mid] < numbers[left]){
                right = mid;
            }else{
                left ++;
            }
          
        }
        return numbers[left];
    }

   
}

测试结果

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

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

相关文章

Styletron: 面向组件的样式设计工具包

styletron官网&#xff1a; styletron的GitHub链接&#xff1a; styletron-react 一. 介绍 Styletron是一个通用的component-oriented&#xff08;面向组件的&#xff09;样式工具。它属于css-in-js类别。Styletron可以很好地与React配合使用&#xff0c;但也可以与其他框架或…

Allegro172版本无法低亮颜色的解决办法

Allegro172版本无法低亮颜色的解决办法 在用Allegro172版本做PCB设计的时候,高亮颜色是常用的命令,同时将高亮的颜色去高亮也是使用的十分频繁。 有时在去高亮的时候会出现无法去高亮的情况如下图 右边这块铜皮被高亮成了白色 可以看到即便使用去高亮命令,铜皮的颜色仍然还…

初次使用GPU云服务器

前言&#xff1a; 在体验了GPU云服务器&#xff08;GPU Cloud Computing&#xff0c;GPU&#xff09;后&#xff0c;我认为这是一个非常强大的弹性计算服务。它为深度学习、科学计算、图形可视化、视频处理等多种应用场景提供了强大的GPU算力&#xff0c;能够满足各类用户的计算…

web集群学习--基于CentOS构建LVS-DR集群、配置nginx负载均衡

基于CentOS构建LVS-DR集群 环境准备 主机名 ip地址 node1 192.168.1.140 client node2 192.168.1.141 LVS node3 192.168.1.142 RS1 node4 192.168.1.143 RS2配置 1.关闭防火墙和SELinux [rootclient~]# systemctl stop firewalld [rootclient~]# systemctl disabl…

实现UDP可靠性传输

文章目录 1、TCP协议介绍1.1、ARQ协议1.2、停等式1.3、回退n帧1.4、选择性重传 1、TCP协议介绍 TCP协议是基于IP协议&#xff0c;面向连接&#xff0c;可靠基于字节流的传输层协议 1、基于IP协议&#xff1a;TCP协议是基于IP协议之上传输的&#xff0c;TCP协议报文中的源端口IP…

【Linux升级之路】5_基础IO

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【Linux升级之路】 ✒️✒️本篇内容&#xff1a;文件操作&#xff0c;文件管理&#xff0c;重定向&#xff0c;简易shell添加重定向功能&#xff0c;文件属…

领航优配:暑期旅游市场热度持续攀升,相关公司业绩有望持续释放

到发稿&#xff0c;海看股份涨停&#xff0c;中广天择、探路者、众信旅行等涨幅居前。 8月8日&#xff0c;在线旅行板块震动上涨&#xff0c;到发稿&#xff0c;海看股份涨停&#xff0c;中广天择、探路者、众信旅行等涨幅居前。 今年以来&#xff0c;国内旅行商场逐渐恢复。文…

Unity制作护盾——2、力场冲击波护盾

Unity制作力场护盾 大家好&#xff0c;我是阿赵。   继续做护盾&#xff0c;这一期做一个力场冲击波护盾。 一、效果展示 主要的效果并不是这个球&#xff0c;而是护盾在被攻击的时候&#xff0c;会出现一个扩散的冲击波。比如上图在右边出现了冲击波 如果在左边被攻击&am…

安装ubuntu 18.04 系统(1)——制作系统安装U盘

https://rufus.ie/zh/ 下载该软件&#xff0c;准备制作启动盘下载自己想要的镜像&#xff0c;http://mirrors.163.com/ubuntu-releases/18.04/&#xff0c; 我选择的是ubuntu-18.04.6-live-server-amd64.iso 因为&#xff0c;科研写程序使用&#xff0c;不需要桌面版本。开始制…

分布式协议与算法——拜占庭将军问题

拜占庭将军问题 背景&#xff1a;以战国时期为背景 战国时期&#xff0c;齐、楚、燕、韩、赵、魏、秦七雄并立&#xff0c;后来秦国的势力不断强大起来&#xff0c;成了东方六国的共同威胁。于是&#xff0c;这六个国家决定联合&#xff0c;全力抗秦&#xff0c;免得被秦国各个…

go错误集(持续更新)

1.提示以下报错 Build Error: go build -o c:\Users\Administrator\Desktop__debug_bin2343731882.exe -gcflags all-N -l . go: go.mod file not found in current directory or any parent directory; see ‘go help modules’ (exit status 1) 解决办法&#xff1a; go …

mysql进阶篇(二)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…

知识贴:如何使用校对软件改善新闻稿件的质量

使用校对软件改善新闻稿件的质量可以按照以下步骤进行&#xff1a; 1.选择适合的校对软件&#xff1a;市场上有许多校对软件可供选择&#xff0c;例如语法和拼写检查工具&#xff0c;自动校对工具以及专门为新闻写作而设计的工具。根据自己的需求和预算&#xff0c;选择最适合的…

山西电力市场日前价格预测【2023-08-09】

日前价格预测 预测明日&#xff08;2023-08-09&#xff09;山西电力市场全天平均日前电价为335.82元/MWh。其中&#xff0c;最高日前电价为364.48元/MWh&#xff0c;预计出现在19: 45。最低日前电价为306.83元/MWh&#xff0c;预计出现在13: 30。 价差方向预测 1&#xff1a; 实…

C语言__LINE__和#line学习

这是ANSI C 预定义的&#xff0c; __LINE__ &#xff0c;包含当前行号&#xff0c;一个十进制常量&#xff1b; #line指令用于改变 __LINE__的内容&#xff1b; 先看一下VC6控制台程序&#xff0c; printf这行是第五行&#xff0c;输出了 5 &#xff1b; 使用#line重新定义了…

Java源码解析-重点集合框架篇

Java 源码解析&#xff0c;集合篇 一&#xff1a;故事背景二&#xff1a;数据结构2.1 线性结构2.2 非线性结构 三&#xff1a;集合分类3.1 结构图 四&#xff1a;详细分析4.1 List4.1.1 ArrayList4.1.1.1 底层结构4.1.1.2 主要特点 4.1.2 LinkedList4.1.2.1 底层结构4.1.2.2 主…

SAM 大模型Colab快速上手【Segment Anything Model】

Google Colab 是一个基于云的 Jupyter 笔记本环境&#xff0c;允许您通过浏览器编写、运行和共享 Python 代码。 它就像 Google 文档&#xff0c;但用于代码。 通过免费版本的 Google Colab&#xff0c;你可以获得带有约 16GPU VRAM 的 Nvidia Tesla T4 GPU&#xff0c;这对于…

2023牛客暑期多校训练营6

参考2023牛客暑期多校训练营6&#xff08;G、E、C、B、A&#xff09; - 知乎 (zhihu.com) 纯数学,推式子 从贡献度的角度考虑 首先,当两个子集大小均相同时,才有可能变相同 其次是我们需要先将S和T中的数分别从小到大排个序,然后要变相同花费最小,肯定是对齐的数之间变换,可…

【力扣每日一题】2023.8.8 任意子数组和的绝对值的最大值

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个数组&#xff0c;让我们找出它的绝对值最大的子数组的和。 这边的子数组是要求连续的&#xff0c;让我们找出一个元素之和…

Cadvisor+InfluxDB+Grafan+Prometheus(详解)

目录 一、CadvisorInfluxDBGrafan案例概述 &#xff08;一&#xff09;Cadvisor Cadvisor 产品特点&#xff1a; &#xff08;二&#xff09;InfluxDB InfluxDB应用场景&#xff1a; InfluxDB主要功能&#xff1a; InfluxDB主要特点&#xff1a; &#xff08;三&#…