您的位置:首页 > 其它

154. Find Minimum in Rotated Sorted Array II

2016-05-27 15:32 477 查看
题目:Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 
0 1 2 4 5 6 7
 might become 
4
5 6 7 0 1 2
).

Find the minimum element.The array may contain duplicates.

此题是I的扩展,有序数组部分元素置于数组后半部,数字可能重复,例如【1,1,1,0,1】,考虑使用二分查找的变形

如果mid>=left,说明min在mid的右边(包含mid)→_→
如果mid<=right,说明min在mid的左边(包含mid)☜

特例:【1,1,1,0,1】与【1,0,1,1,1】left=mid=right这种情况,无法使用上述条件寻找,只能通过遍历来寻找最小值

public class Solution {
public int findMin(int[] nums) {
if(nums == null || nums.length==0)
return -1;

int l=0,r=nums.length-1,mid=(l+r)/2;
while(l<=r && l>=0 && r<nums.length){
if(r-l ==1 || nums[l] < nums[r]) return Math.min(nums[l], nums[r]); //终止
//如果存在[1,1,1,0,1]这种情况不能用二分法判断,只能遍历
if(nums[mid] == nums[l] && nums[mid] == nums[r]){//必须放在下面两个if条件之前
int min=nums[0];
for(int i=l;i<=r;i++)
min=Math.min(min, nums[i]);
return min;
}
if(nums[mid] >= nums[l])
l=mid;
if(nums[mid] <= nums[r])
r=mid;
mid=(l+r)/2;
}
return nums[mid];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetecode