Java旋转数组中的最小数字(图文详解版)

目录

1.题目描述

2.题解

分析

具体实现

方法一(遍历):

方法二(排序):

方法三(二分查找):


1.题目描述

有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。请问,给定这样一个旋转数组,求数组中的最小值。

示例

输入:[3, 4, 5, 1, 2]

返回值:1

2.题解

分析

题目中的数组为

 题目要求我们找出其中的最小值

具体实现

方法一(遍历):

寻找数组中的最小值,遍历数组即可找到最小值

public class Solution {
    public int minNumberInRotateArray(int[] nums) {
        if(nums.length == 0){
            return -1;
        }
        int min = nums[0];
        for (int i = 1; i < nums.length; i++) {
            if (min > nums[i]) {
                min = nums[i];
            }
        }
        return min;
    }
}

 

方法二(排序):

使用Arrays.sort方法对数组进行降序排序,则nums[0]即为数组的最小值

import java.util.Arrays;

public class Solution {
    public int minNumberInRotateArray (int[] nums) {
        if(nums.length == 0){
            return -1;
        }
        Arrays.sort(nums);
        return nums[0];
    }
}

方法三(二分查找):

数组原本是一个升序数组,旋转之后,数组被分成两部分,前、后半部分分别为升序,后半部分小于前半部分,我们可以利用二分查找的思想,找到其旋转点,即可找到数组的最小值

首先找到数组首尾两端元素,并求出数组中间的下标

再将数组中间值与数组首尾两端元素进行比较,

nums[mid] > nums[right],则left = mid + 1

 

 若nums[mid] < nums[right],则right = mid

nums[mid] = nums[right], 则将right向左移动一位,即right--

 然后进入下一次循环,循环的条件为left < right

通过不断缩小范围,最终能够找到数组的最小值

完整代码

public class Solution {
    public int minNumberInRotateArray(int[] nums) {
        if(nums.length == 0){
            return -1;
        }
        int left = 0;
        int right = nums.length - 1;
        while(left < right){
            //找到数组的中点
            int mid = (left + right) / 2;
            if(nums[mid] > nums[right]){
                //旋转点在[mid+1, j]中,跳过mid+1左边元素
                left = mid + 1;
            } else if(nums[mid] < nums[right]){
                //旋转点在[left, mid]中,跳过mid右边元素
                right = mid;
            }else{
                //缩小right继续查找
                right--;
            }
        }
        //返回旋转点
        return nums[left];
    }
}

 :题目出自牛客网,链接如下

旋转数组的最小数字_牛客题霸_牛客网 (nowcoder.com)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入了解电脑硬件以及多线程编程

文章目录 认识计算机硬件与多核CPU的工作原理单核CPU多核CPU并发与并行 深入了解进程、线程及其优先级进程与线程线程的创建与命名线程的优先级与控制线程的休眠与等待 线程安全与锁机制同步与异步线程安全问题与锁可重入锁解决线程安全问题 多线程间的通信与线程池的使用线程通…

无涯教程-Perl - select函数

描述 此函数将输出的默认文件句柄设置为FILEHANDLE,如果未指定文件句柄,则设置由print和write等功能使用的文件句柄。如果未指定FILEHANDLE,则它将返回当前默认文件句柄的名称。 select(RBITS,WBITS,EBITS,TIMEOUT)使用指定的位调用系统功能select()。 select函数设置用于处理…

每天一道leetcode:1129. 颜色交替的最短路径(图论中等广度优先遍历)

今日份题目&#xff1a; 给定一个整数 n&#xff0c;即有向图中的节点数&#xff0c;其中节点标记为 0 到 n - 1。图中的每条边为红色或者蓝色&#xff0c;并且可能存在自环或平行边。 给定两个数组 redEdges 和 blueEdges&#xff0c;其中&#xff1a; redEdges[i] [ai, bi…

创建Azure资源锁

锁的介绍 在Azure中&#xff0c;资源锁是一种用于保护订阅、资源组或者单个资源的机制。它可以防止对受锁定的资源进行删除或修改操作&#xff0c;帮助确保资源的连续可用性和安全性。 Azure中的资源锁可以分为两种类型&#xff1a; 删除锁&#xff08;CanNotDelete&#xf…

el-table自适应缩放大小

安装依赖 npm install --save vue-draggable-resizable //或 cnpm install --save vue-draggable-resizablemain.js引入依赖 import VueDraggableResizable from vue-draggable-resizable import "vue-draggable-resizable/dist/VueDraggableResizable.css"; Vue.c…

linux中的/dev/null

1.什么是/dev 在 Linux 上&#xff0c;从驱动程序到设备的所有内容都可以作为文件进行访问。/dev/ 是包含所有物理和虚拟设备的目录。例如&#xff0c;/dev/sda 可能是您的主硬盘驱动器&#xff0c;/dev/sdb 可能是您现在正在使用的笔记本驱动器的文件。这就是您在 Linux 中访问…

原子css 和 组件化css如何搭配使用

如果让你来实现下面这种页面&#xff0c;该怎么实现呢 原子化和css组件化方式写法&#xff0c;可以搭配起来使用&#xff0c;常用的css 原子css 比如 下面这些类似flex 布局&#xff0c;lstn curser-pointer 等常用的或者 具备一定规律性的padding margin 样式可以抽取为单独…

KubeSphere 部署 Zookeeper 实战教程

前言 知识点 定级&#xff1a;入门级如何利用 AI 助手辅助运维工作单节点 Zookeeper 安装部署集群模式 Zookeeper 安装部署开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生产环境&#xff0c;配置略有不同) 主机名IPCPU内存系统盘数据盘用途ks-master-0192.168.9.9…

【maven】通过profiles实现:怎样激活某个仓库、同时加载多个profile、不同环境加载不同依赖jar

文章目录 一. 基本用法二. 仓库激活方式1. 使用activeProfile激活2. 使用-P参数激活3. 使用-P参数不激活 三. 查看激活的仓库四. 不同环境依赖不同版本的jar Maven中的profile是一组可选的配置&#xff0c;可以用来设置或者覆盖配置默认值。有了profile&#xff0c;你就可以为不…

【elementUi】绘制自定义表格、绘制曲线表格

要求绘制下图系列表格&#xff1a; 实现步骤: 1.绘制树&#xff0c;实现树勾选字段—>表格绘制字段 逻辑&#xff1a; 树&#xff1a;check-change“treeChart.handleCheckChange” 绑定点击选择事件&#xff0c;改变data.column3数据项&#xff1b;表格:columns"data…

问AI一个严肃的问题

chatgpt的问世再一次掀起了AI的浪潮&#xff0c;其实我一直在想&#xff0c;AI和人类的关系未来会怎样发展&#xff0c;我们未来会怎样和AI相处&#xff0c;AI真的会完全取代人类吗&#xff0c;带着这个问题&#xff0c;我问了下chatgpt&#xff0c;看一看它是怎么看待这个问题…

图解WebSocket

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱写博客的嗯哼&#xff0c;爱好Java的小菜鸟 &#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&#x1f44d;一下博主哦 &#x1f4dd;个人博客&#xff1a;敬请期待 文章目录 前言一、…

【量化课程】02_4.数理统计的基本概念

2.4_数理统计的基本概念 数理统计思维导图 更多详细内容见notebook 1.基本概念 总体&#xff1a;研究对象的全体&#xff0c;它是一个随机变量&#xff0c;用 X X X表示。 个体&#xff1a;组成总体的每个基本元素。 简单随机样本&#xff1a;来自总体 X X X的 n n n个相互…

asp.net core webapi如何执行周期性任务

使用Api执行周期性任务 第一种&#xff0c;无图形化界面1.新建类&#xff0c;继承IJob&#xff0c;在实现的方法种书写需要周期性执行的事件。2.编写方法类&#xff0c;定义事件执行方式3.在启动方法中&#xff0c;进行设置&#xff0c;.net 6中在program.cs的Main方法中&#…

c51单片机串行通信示例代码(单片机--单片机通信)(附带proteus线路图)

//这个发送端代码 #include "reg51.h" #include "myheader.h" #define uchar unsigned char long int sleep_i0; long int main_i0; void main() {uchar sendx[6]{2,0,2,3,8,1};sleep(2000);TMOD0x20;TH10XF4;//根据波特率计算公式这里需要设置为这么多才能…

对自定义表格数据设计自定义查询/汇总

目录 1 前言 2 生成数据 3 设计一个汇总 4 试一下效果 5 导出为excel文件的源代码 6 后记 1 前言 对自定义表格中录入或者导入的数据&#xff0c;必须能定义查询和汇总&#xff0c;否则程序基本没什么用。就是说&#xff0c;程序应该具备对任意表格进行方便的查询汇总公式…

DatawhaleAI夏令营第三期机器学习用户新增预测挑战赛baseline新手教程

本教程会带领大家项目制学习&#xff0c;由浅入深&#xff0c;逐渐进阶。从竞赛通用流程与跑通最简的Baseline&#xff0c;到深入各个竞赛环节&#xff0c;精读Baseline与进阶实践技巧的学习。 千里之行&#xff0c;始于足下&#xff0c;从这里&#xff0c;开启你的 AI 学习之旅…

预训练GNN:GPT-GNN Generative Pre-Training of Graph Neural Networks

一.文章概述 本文提出了一种自监督属性图生成任务来预训练GNN&#xff0c;使得其能捕图的结构和语义属性。作者将图的生成分为两个部分&#xff1a;属性生成和边生成&#xff0c;即给定观测到的边&#xff0c;生成节点属性&#xff1b;给定观测到的边和生成的节点属性&#xf…

01:STM32点灯大师和蜂鸣器

目录 一:点亮1个LED 1:连接图 2:函数介绍 3:点灯代码 二:LED闪烁 1:函数介绍 2:闪烁代码 三:LED流水灯 1:连接图 2:函数介绍 3:流水灯代码 四:按键控制LED 1:电路图 2:连接图 3:函数介绍 4:按键控制LED代码 五:蜂鸣器 1:连接图 2:蜂鸣器代码 六:光敏电阻控制…

pywinauto结合selenium实现文件上传

简介 PC端-Windows上的元素识别可用viewWizard工具 PC端-Windows上的元素操作可用pywinauto库 浏览器上网页的元素识别可用selenium 安装 pip installer pywinauto 使用须知 pywinauto官方文档 确定app的可访问技术 1、win32 API(backend“win32”) 一般是MFC、VB6、VCL…