返回顶部
首页 > 资讯 > 前端开发 > html >LeetCode题解之怎么实现旋转数组的数字
  • 472
分享到

LeetCode题解之怎么实现旋转数组的数字

2024-04-02 19:04:59 472人浏览 安东尼
摘要

这篇文章主要介绍“LeetCode题解之怎么实现旋转数组的数字”,在日常操作中,相信很多人在LeetCode题解之怎么实现旋转数组的数字问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大

这篇文章主要介绍“LeetCode题解之怎么实现旋转数组的数字”,在日常操作中,相信很多人在LeetCode题解之怎么实现旋转数组的数字问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”LeetCode题解之怎么实现旋转数组的数字”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

题目:旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组  [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。

示例 1:

输入:[3,4,5,1,2] 输出:1 示例 2:

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

解法一

首先找到题目的提干:

递增排序数组(可以重复),旋转,最小元素

也就是一个递增数组,将一部分移动到数组尾部,比如:

[1,2,3,4,5] //旋转之后 [3,4,5,1,2]

找到其中的最小数字。

那么我们很容易想到的第一中解法就是遍历数组,然后找到某一个数字比它前面一个数字小的时候,那么这个数字就是我们要找的最小数字。

因为正常来说都是后面数字大于前数字,所以出现小于前数字,那么就是这个旋转数组的分界点,也就是最小数字了。

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

方法消耗情况

以后不写这个了。由于每次测试用例不同,造成的结果也相差太大,没有参考性。

时间复杂度

遍历一次数组,所以时间复杂度为O(n)

空间复杂度

没有用到另外的空间,所以空间复杂度为O(1)

解法二

二分法。

有的人可能会疑惑,二分法不是用来查找顺序数组的吗,这个旋转之后也算吗?

我们回顾下二分法的关键点就是:

取任意一个关键数字,都能通过判断 来确定在我们要的值在哪个区间(关键数字的前后)。

那么在我们的旋转数组中,能做到这一点吗?

比如我们取中间值a和最后值b,如果a大于b,就说明这个分界值在这a和b之间,a之前的数据是正确排序的。

如果a小于b,说明分界值在a之前,a到b之间的数据是正确排序的。

比如刚才的[3,4,5,1,2],中间值5大于最后的值2,说明分界值在5和2之间,也就是1了。

class Solution {     public int minArray(int[] numbers) {         int left=0;         int right=numbers.length-1;         //二分法查找条件         while(left<right){             //找到中间点             int mid=left+(right-left)/2;             if(numbers[mid]<numbers[right]){                 right=mid;             }else if(numbers[mid]>numbers[right]){                 left=mid+1;             }else{                 right--;             }         }         return numbers[left];     } }

其中right=mid,left=mid+1的原因是因为,当numbers[mid]

而numbers[mid]>numbers[right]的情况下,mid不可能为最小,所以设置为mid+1。

到此,关于“LeetCode题解之怎么实现旋转数组的数字”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: LeetCode题解之怎么实现旋转数组的数字

本文链接: https://lsjlt.com/news/83976.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • LeetCode题解之怎么实现旋转数组的数字
    这篇文章主要介绍“LeetCode题解之怎么实现旋转数组的数字”,在日常操作中,相信很多人在LeetCode题解之怎么实现旋转数组的数字问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • leetcode旋转数组问题怎么解决
    本篇内容介绍了“leetcode旋转数组问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!解题思路暴力法每次旋转1个位置, 旋转k次...
    99+
    2023-06-27
  • C++实现LeetCode(189.旋转数组)
    [LeetCode] 189. Rotate Array 旋转数组 Given an array, rotate the array to the right by k&#...
    99+
    2024-04-02
  • C++怎么实现旋转数组
    本篇内容主要讲解“C++怎么实现旋转数组”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么实现旋转数组”吧!Rotate Array 旋转数组Given an array, rotate ...
    99+
    2023-06-20
  • C++实现LeetCode(81.在旋转有序数组中搜索之二)
    [LeetCode] 81. Search in Rotated Sorted Array II 在旋转有序数组中搜索之二 Suppose an array sorted in as...
    99+
    2024-04-02
  • C++实现LeetCode(154.寻找旋转有序数组的最小值之二)
    [LeetCode] 154. Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值之二 Suppose an array sor...
    99+
    2024-04-02
  • php怎么实现二维数组旋转
    本文操作环境:Windows7系统,PHP7.4版,Dell G3电脑。php怎么实现二维数组旋转?PHP二维数组矩形转置实例<php //二维数组转置 //定义一个二维数组 $arr =array(array...
    99+
    2014-09-26
    php
  • C语言双指针多方法旋转数组解题LeetCode
    目录暴力思路外加数组格局抬高环形替代LeetCode题目如下: 首先这个中等难度我是没搞懂,后面才发现原来中等中在要求多方法上,那就来看看怎么搞定他吧。 暴力思路 首先我说一下我本...
    99+
    2024-04-02
  • C++实现LeetCode(33.在旋转有序数组中搜索)
    [LeetCode] 33. Search in Rotated Sorted Array 在旋转有序数组中搜索 Suppose an array sorted in ascendi...
    99+
    2024-04-02
  • C++实现LeetCode(153.寻找旋转有序数组的最小值)
    [LeetCode] 153. Find Minimum in Rotated Sorted Array 寻找旋转有序数组的最小值 Suppose an array sorted i...
    99+
    2024-04-02
  • JavaScript怎么旋转数组
    本篇内容介绍了“JavaScript怎么旋转数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.什么是旋...
    99+
    2024-04-02
  • Python3实现旋转数组的3种算法
    下面是python3实现的旋转数组的3种算法。一、题目给定一个数组,将数组中的元素向右移动k个位置,其中k是非负数。例如:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步:...
    99+
    2023-01-31
    数组 算法
  • Java旋转数组中的最小数字(图文详解版)
    目录 1.题目描述 2.题解 分析 具体实现 方法一(遍历): 方法二(排序): 方法三(二分查找): 1.题目描述 有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末...
    99+
    2023-09-01
    算法 数据结构 java
  • C++实现LeetCode数组练习题
    目录1、存在重复元素2、最大子序和3、两数之和4、合并两个有序数组5、两个数组的交集II6、买卖股票的最佳时机7、杨辉三角8、重塑矩阵9、有效的数独10、矩阵置零总结1、存在重复元素...
    99+
    2024-04-02
  • php如何实现二维数组旋转
    这篇文章主要介绍了php如何实现二维数组旋转,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php实现二维数组旋转的方法:1、创建一个PHP示例文件;2、定义一个二维数组;3、...
    99+
    2023-06-22
  • C++怎么实现在旋转有序数组中搜索
    这篇文章主要介绍了C++怎么实现在旋转有序数组中搜索的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++怎么实现在旋转有序数组中搜索文章都会有所收获,下面我们一起来看看吧。Search in Rotated S...
    99+
    2023-06-19
  • C++中怎么利用LeetCode寻找旋转有序数组的最小值
    这篇文章将为大家详细讲解有关C++中怎么利用LeetCode寻找旋转有序数组的最小值,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。[LeetCode] 154. Find Minimum i...
    99+
    2023-06-20
  • java字符串转数组怎么实现
    要将一个字符串转换为数组,可以使用String类中的toCharArray()方法。该方法会返回一个字符数组,数组中的每个元素对应字...
    99+
    2023-10-24
    java
  • ios字符串转数组怎么实现
    在iOS中,可以使用NSString的componentsSeparatedByString方法来实现字符串转数组的操作。具体代码如...
    99+
    2024-03-01
    ios
  • sql数组转字符串怎么实现
    在 SQL 中将数组转换为字符串可以使用 STRING_AGG 函数。STRING_AGG 函数可以将指定列或表达式的值连接为一个字...
    99+
    2024-04-09
    sql
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作