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

旋转数组的最小数字

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];

        
    
    }
}
全部评论

相关推荐

鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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