您现在的位置是:亿华云 > 域名
LeetCode题解之旋转数组的数字
亿华云2025-10-04 03:09:53【域名】5人已围观
简介前言今天继续算法题:旋转数组的最小数字题目:旋转数组的最小数字把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [
前言
今天继续算法题:旋转数组的题解最小数字
题目:旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转数组旋转。输入一个递增排序的数字数组的一个旋转,输出旋转数组的题解最小元素。例如,旋转数组数组 [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。
时间复杂度
二分法最坏情况:
n/(2的x次方)=1,x=long2n。所以时间复杂度为O(longn)
还有一种情况是所有元素全部相同,这种情况下每次都执行right-1,所以时间复杂度为O(n)
空间复杂度
没有用到另外的空间,所以空间复杂度为O(1)
参考
https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/submissions/
本文转载自微信公众号「 码上积木」,可以通过以下二维码关注。亿华云计算转载本文请联系 码上积木公众号。
很赞哦!(74)
相关文章
- 为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
- 鸿蒙轻内核M核源码分析系列十二事件Event
- 99%的人没使用过它俩,Docker优秀实践
- 初创公司真的适合用微服务吗?
- 为了避免将来给我们的个人站长带来的麻烦,在选择域名后缀时,我们的站长最好省略不稳定的后缀域名,比如n,因为我们不知道策略什么时候会改变,更不用说我们将来是否还能控制这个域名了。因此,如果站长不是企业,或者有选择的话,如果不能选择域名的cn类,最好不要选择它。
- 三国演义:责任链模式
- 躲不过JPA的坑之级联保存
- 鸿蒙轻内核M核源码分析系列十三 消息队列Queue
- 5、企业注册国内域名需要证件,其它情况一律不需要证件。
- 【死磕JVM】看完这篇我也会排查JVM内存过高了 就是玩儿!
热门文章
站长推荐
4、说起来容易
最新TIOBE编程语言排行:C语言第一,Python反超Java,挤进第二
面试侃集合 | SynchronousQueue非公平模式篇
一日一技:难以置信,还有人不知道反斜杠和引号的关系
当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
字节码:分析 Python 执行的终极利器
增强现实将现场服务提升到一个新水平
聊聊JavaScript 异步编程史