※剑指offer 11 旋转数组的最小数字

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array.length==0)
            return 0;
        int left=0;
        int right=array.length-1;
        while(left<right){
            int mid=left+(right-left)/2;
            if(array[left]==array[mid]&&array[mid]==array[right])
                return minNumber(array,left,right);
            else if(array[mid]<array[right])//********见注释
                right=mid;
            else
                left=mid+1;
            
        }
        return array[left];
    }
    public int minNumber(int[]nums,int l,int h){
        for(int i=l;i<h;i++){
            if(nums[i]>nums[i+1])
                return nums[i+1];
            }
        return nums[l];
    }
}
/*
这里也可以array[mid]==[right],虽然mid=right,此时左边因为前面的限制条件必然left>mid,
间断点在左边区间,但是因为找的是最小元素 所以在右边也没问题
但逻辑上应该是左边
*/

全部评论

相关推荐

jnsytgsyqj...:简历跟测试没关系,你更适合运营
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务