题解 | #旋转数组的最小数字#

旋转数组的最小数字

http://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        int left=0;
        int right=array.length-1;
//         特殊情况1:把非降序数组的0个元素搬到数组末尾
        if(array[left]<array[right]){
            return array[left];
        }
        while(left<right-1){
        int mid=(left+right)/2;
//         特殊情况2:array[left],array[right],array[mid]都相等,这样的话,如果让这个情况去执行下面两个if,那就会是left=mid=right,然后return array[right],但是这个array[right]不一定是最小值
            if(array[left]==array[mid]&&array[mid]==array[right]){
                int minIndex=0;
                for(int i=1;i<array.length-1;i++){
                    if(array[minIndex]>array[i]){
                        minIndex=i;
                    }
                }
                return array[minIndex];
            }
        if(array[mid]>=array[left]){
            left=mid;
        }
        if(array[mid]<=array[right]){
            right=mid;
        }
      }
        return array[right];

        
    
    }
}
全部评论

相关推荐

qz鹿:*** 祝他毕业就失业
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务