[每日一道小算法(二十四)] [二分查找]旋转数组的最小数字(剑指offer习题)
发布时间:2022-10-08 09:41:23 359
相关标签: # java# java
前言:
这是一道二分查找法变形的题型,很有意义,值得学习。
题目类型
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
题目解析
这道题,我们可以直接使用暴力方法,直接遍历数组找到最小值即可,这样的话,时间复杂度有点高为O(n)。但是这道题这么出,显然不可能是让我用这种方法来解决这道题,所以我们需要来重新找一个更好的解决办法。
我们根据题意,可以看出,这个数组在旋转之前是一个递增的数组,所以根据这一特性,我们可以使用二分查找法来解决这道题。具体分析如下:
我们用高低位和中间的值来进行比较,看处于递增还是递减序列,进行操作缩小范围。我们定义两个指针,第一个指针指向数组开始处,第二指针指向末尾处。
- 处于递增序列,则low指针进行上移。
- 处于递减:则high指针下移
- 其余情况:low++缩小范围
-
-
代码样例
文章来源: https://blog.51cto.com/u_14523732/5633607
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报