您的位置:首页 > 其它

OJ日常 | 二分查找——旋转数组的最小数字

2018-03-21 23:35 344 查看

问题描述

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

一个答案

这道题第一眼看是并没有联想到二分查找的,想到是遍历数组,第一个降序的数字对,后者。

这样明显太简单了,虽然只需要O(n)O(n) ,但是还需要进一步优化。

这道题绊住了一(hen)会(jiu)儿,因为没有注意到关键词非递减,也就是说数字可以相同

基本原理就是让先后指针在分界线两侧无限逼近,所以front=mid而不是front=mid+1

当指针刚好是最小值,后者会导致前指针跑到右侧



import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array.length==0 || array==null) return 0;
int len_= array.length;
int front = 0;
int behind = len_-1;
int mid=0;
while(behind-front!=1){
mid = (front+behind)/2;
if(array[front]>array[mid]) behind=mid;
else if(array[front]<array[mid]) front=mid;
else front=front+1;
}
return array[behind];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐