注:此博客不再更新,所有最新文章将发表在个人独立博客limengting.site。分享技术,记录生活,欢迎大家关注
题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
**思路:**利用数组两部分都是有序的进行二分查找,时间复杂度O(logn)
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if (array == null || array.length < 0) return -1;
if (array.length == 0) return 0;
int left = 0, right = array.length - 1;
while (left < right) {
int middle = (left + right) / 2;
if (array[middle] < array[right]) // min is in the left part
right = middle;
else if (array[middle] > array[right]) // min is in the right part
left = middle + 1;
else right --;
}
return array[left];
}
}
运行时间:353ms
占用内存:27916k