154. Find Minimum in Rotated Sorted Array II

来源:互联网 发布:广东干部网络培训登陆 编辑:程序博客网 时间:2024/05/22 00:51

题目: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];    }}


0 0
原创粉丝点击