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

news2024/11/26 7:26:02

目录

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)

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

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

相关文章

【LeetCode 75】第二十六题(394)字符串解码

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码运行结果&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 给我们字符串&#xff0c;让我们解码&#xff0c;那么该怎么解码呢&#xff0c;被括号【】包裹起来的字符串需要扩展成括号左边第…

一百五十一、Kettle——Linux上安装的kettle8.2开启carte服务以及配置子服务器

一、目的 kettle8.2在Linux上安装好可以启动界面、并且可以连接MySQL、Hive、ClickHouse等数据库后&#xff0c;准备在Linux上启动kettle的carte服务 二、实施步骤 &#xff08;一&#xff09;carte服务文件路径 kettle的Linux运行的carte服务文件是carte.sh &#xff08;二…

grafana部署

一、前言 grafana是一款用于将prometheus收集的数据通过ui展示出来的组件&#xff0c;可以直观的看到每个数据的情况和指标&#xff0c;grafana有很多的ui展示模板可以使用 二、部署 这里我使用docker部署 先查找一下镜像 docker search grafana 创建存放grafana数据的目录…

C++初阶之一篇文章教会你list(理解和使用)

list&#xff08;理解和使用&#xff09; 什么是list特点和优势基本操作示例用法与其他序列式容器&#xff08;如 std::vector 和 std::deque&#xff09;相比&#xff0c;std::list 显著的区别和优势成员类型 list构造函数1. default (1)2. fill (2)3.range (3)4. copy (4) li…

无涯教程-Perl - opendir函数

描述 此函数使用readdir函数打开目录EXPR,并将其与DIRHANDLE关联以进行处理。 语法 以下是此函数的简单语法- opendir DIRHANDLE, EXPR返回值 如果成功,此函数将返回true。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perl -w$dirname"/tmp";opendir ( …

MySQL~事务的四大特性和隔离级别

事务的四大特性 1.原子性&#xff1a;一个事务&#xff08;transaction&#xff09;中的所有操作&#xff0c;要么全部完成&#xff0c;要么全部不完成。事务在执行过程中发生错误&#xff0c;会被回滚&#xff08;Rollback&#xff09;到事务开始前的状态&#xff0c;就像这个…

MySQL环境与配置

安装MySQL https://www.mysql.com/ 进入下载官网后 下载完成后运行安装包下载完成后运行安装包 选择完路径后一直点下一步 然后运行MySQL 设置密码 这里如安装失败请右键我的电脑点击属性&#xff0c;检查电脑名和组名是否为英文 启动与停止MySQL mysql安装完毕后默认是运行…

【C语言】进阶指针,超详解,含丰富代码示例

文章目录 前言指针进阶的重点内容1.字符指针2.数组指针3.指针数组4.函数指针5.函数指针数组6. 指向函数指针数组的指针 总结 这里是初阶的链接&#xff0c;方便大家对照查看&#xff01;&#xff01;&#xff01;添加链接描述 前言 大家好呀&#xff0c;今天和大家将指针进阶…

SpringBoot在线失物招领系统

一个基于SpringBootSemanticUI的pc Web在线失物招领系统 http://localhost:8080/swzl/index 主页 http://localhost:8080/swzl/login 登录页 用户表user admin字段为true是管理员 false用户 springboot2.3 springmvc mybatis html ajax idea 或eclipse maven mys…

9.3.2.1网络原理(UDP)

1.UDP的基本特点:无连接,不可靠传输,面向数据报,全双工. 2.1~1024的端口号有特定的含义,不建议使用.比如21:ftp,22:ssh,80:http,443:https. 3.CRC校验算法:循环冗余校验和,把UDP报中的每个字节都依次进行累加,把累加的结果,放到两个字节的变量中,溢出也无所谓,因为都加了一遍.…

机器学习笔记 - 关于向量嵌入​embedding在机器学习中的使用

向量嵌入概述 向量嵌入是机器学习中最有趣和最有用的概念之一。它们是许多 NLP、推荐和搜索算法的核心。如果您曾经使用过推荐引擎、语音助手、语言翻译器等工具,您就会遇到过依赖嵌入的系统。 与大多数软件算法一样,机器学习算法也需要使用数字。有时,我们的数据集包含数值…

Centos操作系统新安装的Python3中安装mysqlclient库

问题简介&#xff1a; mysqlclient 是python中的一个连接MySQL数据库的重要的三方库&#xff0c;但是在centos中使用pip3 install mysqlclient 方法安装一直报错&#xff0c;经过两天时间的排查,终于找到了解决问题的方法。 [rootd3acd2b8211d /]# pip3 install mysqlclient Co…

聊聊51单片机

目录 1.介绍 2.发展 3.应用领域 4.发展前景 1.介绍 51单片机&#xff08;AT89C51&#xff09;是一种常见的8位微控制器&#xff0c;属于Intel MCS-51系列。它是一种低功耗、高性能的单片机&#xff0c;广泛应用于嵌入式系统中。 51单片机具有很多特点和功能&#xff0c;例如…

用js快速生成一个简单的css原子库 例如: .mr-18 .pl-18

第三方css原子库的缺点 比如 tailwindcss&#xff0c;有学习成本最开始写的时候效率可能还没有我们自己手写效率高&#xff0c;需要配置&#xff0c;会有原始样式被覆盖的问题&#xff1b;总之就是一个字重 自己搓的优点 学习成本低灵活不会有副作用 <!DOCTYPE html>…

eclipse 导入项目js报错问题

eclipse 导入项目后会出现项目中的js文件报错&#xff08;红叉&#xff09;&#xff0c;如下图所示&#xff0c;有时候报错的文件很多&#xff0c;需要集中处理。 解决办法&#xff1a; 右键项目名称》Properties》MyEclipse》JavaScript》Include Path&#xff0c;在右侧选择“…

C语言案例 将一个数组逆序输出14

题目&#xff1a;将一个数组逆序输出 程序分析 数组是根据下标进行输出的&#xff0c;因此&#xff0c;我们可以逆向下标顺序输出。 步骤一&#xff1a;定义程序目标 编写C程序&#xff0c;输入数组元素&#xff0c;然后进行逆序输出。 步骤 二&#xff1a;程序设计 整个程序使…

国产航顺HK32F030M: 基于NTC负温度系数的温度计

前言&#xff1a; 家里的一个儿童澡盆附带的温度计坏掉了&#xff0c;拆解后发现这东西做的真垃圾&#xff01;索性自己做一个。拆下了里面的NTC热敏电阻&#xff0c;但是不知道NTC的性能参数&#xff0c;经过测量与查资料后&#xff0c;采用用中位值滤波 、 Steinhart-Hart方…

期权的希腊字母计算及应用

1.前言 期权价格会受到多个因素的影响,如标的资产价格、时间、波动率等,所以引入希腊字母来衡量不同因素对期权价格的影响程度,即Delta、Gamma、Vega、Theta和Rho,从而更综合的研究期权的影响因素。对于单独希腊值的作用,Delta经常被用做计算期权交易杠杆的指标、期权和期…

Linux系统下Redis3.2集群

本节主要学习reids主从复制的概念&#xff0c;作用&#xff0c;缺点&#xff0c;流程&#xff0c;搭建&#xff0c;验证&#xff0c;reids哨兵模式的概念&#xff0c;作用&#xff0c;缺点&#xff0c;结构&#xff0c;搭建&#xff0c;验证等。 文章目录 一、redis主从复制 …

【网络编程(三)】Netty入门到实战这一篇就够了

Netty入门到实战 NettyNetty 核心组件和流程分析数据流转的底层核心ByteBuf 原理分析Netty 解决半包、粘包问题Netty 实现心跳检查机制 Netty NIO 是一种 I/O 模型&#xff0c;netty 是基于 NIO 开发出来的一款异步事件驱动框架&#xff0c;它是一个通用的网络应用程序框架。n…