博客
关于我
旋转数组的最小值
阅读量: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/

你可能感兴趣的文章
Win10 环境下安装压缩包版本 MySQL-8.0.13
查看>>
爬取网易科技滚动新闻
查看>>
vuex modules
查看>>
vue父子组件传参的4种方式
查看>>
中缀表达式转后缀表达式
查看>>
Java笔记:单链表
查看>>
Java基础题:小根堆为8,15,10,21,34,16,12,删除关键字8之后需重建堆,需要的比较次数为?
查看>>
phthon基本语法——温习
查看>>
sleep、wait、yield、join——简介
查看>>
web项目配置
查看>>
VTK:相互作用之MouseEventsObserver
查看>>
VTK:相互作用之PickableOff
查看>>
VTK:相互作用之Picking
查看>>
VTK:Medical之MedicalDemo2
查看>>
libfacedetection库的配置及基本使用——内涵(cmake编译libfacedetection库)
查看>>
VS配置属性表,保存Opencv配置信息
查看>>
c语言(基本数据类型)实参与形参传值 用汇编理解
查看>>
输入端噪声容限
查看>>
vue——this.$route 与 this.$router
查看>>
基于单片机可控音乐流水灯控制设计-全套资料
查看>>