博客
关于我
旋转数组的最小值
阅读量:370 次
发布时间:2019-03-05

本文共 962 字,大约阅读时间需要 3 分钟。

旋转数组的最小值

在编程中,我们常常需要处理旋转数组的问题。旋转数组的定义是将数组的前若干个元素移动到数组的末尾。例如,数组{3,4,5,1,2}是{1,2,3,4,5}的一个旋转,其最小值是1。

暴力做法

暴力做法的思路是从数组的末尾开始遍历,逐个检查每个元素是否是当前最小值。具体实现如下:

class Solution {public:   int findMin(vector
& nums) { if(nums.size()==0) return -1; int res=nums[nums.size()-1]; for(int i=nums.size()-2;i>=0;i--) if(nums[i]

这种方法的时间复杂度是O(n^2),因为需要遍历整个数组两次。虽然简单易懂,但在大规模数据面前效率较低。

二分法

二分法利用了数组的有序性质,通过查找找到旋转点,并在旋转点附近进行查找。具体实现如下:

class Solution {public:   int findMin(vector
& nums) { int n = nums.size() - 1; if (n < 0) return -1; while (n > 0 && nums[n] == nums[0]) n--; if (nums[n] >= nums[0]) return nums[0]; int l = 0, r = n; while (l < r) { int mid = l + r >> 1; if (nums[mid] < nums[0]) r = mid; else l = mid + 1; } return nums[r]; }}

这种方法的时间复杂度是O(log n),在大数据量下表现显著优于暴力做法。通过查找旋转点,减少了需要检查的范围,提高了效率。

转载地址:http://nefwz.baihongyu.com/

你可能感兴趣的文章
一致性哈希算法
查看>>
HDFS源码分析(六)-----租约
查看>>
自定义Hive Sql Job分析工具
查看>>
聊聊HDFS RBF第二阶段的主要改进
查看>>
【MySQL】(九)触发器
查看>>
关于Altium Designer 09导出BOM表不能正确分类问题
查看>>
Oracle 11G环境配置
查看>>
【Spark】(六)Spark 运行流程
查看>>
【Python】(十二)IO 文件处理
查看>>
【Oozie】(三)Oozie 使用实战教学,带你快速上手!
查看>>
师兄面试遇到这条 SQL 数据分析题,差点含泪而归!
查看>>
Java8新特性——并行流与顺序流
查看>>
如何通过 Dataphin 构建数据中台新增100万用户?
查看>>
C语言的数值溢出问题(上)
查看>>
BottomNavigationView控件item多于3个时文字不显示
查看>>
函数指针的典型应用-计算函数的定积分(矩形法思想)
查看>>
8051单片机(STC89C52)八个LED灯闪烁
查看>>
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
查看>>
8051单片机(STC89C52)实现可修改初值(并可命令启停)的单倒计时器(Version1.1)
查看>>
ament: command not found ROS2
查看>>