Leetcode 154. Find Minimum in Rotated Sorted Array II
题目链接: Find Minimum in Rotated Sorted Array II
难度:Hard
题目大意:
将一个不递减的数组循环移位若干次,求这个数组的最小元素。时间复杂度要求O(logn)
。
思路:
与Leetcode 153. Find Minimum in Rotated Sorted Array类似,分治,找出乱序出现的位置即可找到最小值。
代码
class Solution {
public int findMin(int[] nums) {
int n=nums.length;
int index=binarySearch(nums,0,n-1);
if(index!=-1){
return nums[index+1];
}
return nums[0];//index=-1说明数组升序排列
}
public int binarySearch(int[] nums, int l,int r){
//寻找index使得nums[index]>nums[index+1]
if(l==r){
return -1;//表示找不到
}
int mid=(l+r)/2;
if(mid+1<=r&&nums[mid]>nums[mid+1]){
return mid;
}
int left=binarySearch(nums,l,mid);
int right=binarySearch(nums,mid+1,r);
if(left>=l&&left<mid){
return left;
}
if(right>=mid+1&&right<r){
return right;
}
return -1;//表示找不到
}
}