剑指offer:旋转数组的最小数字(二分)

旋转数组的最小数字

https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba?tpId=13&tqId=11159&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey

题意:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路1:二分时每次用数组第一个数和array【mid】比较

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array.length==0) return 0;
        if(array.length==1) return array[0];
        int a=array[0];
        int l=0,r=array.length-1,mid=(l+r)/2;
        while(l!=r){
            if(array[mid]>=a){l=mid+1;mid=(l+r)/2;}
            else if(array[mid]<a){r=mid;mid=(l+r)/2;}
        }
        return Math.min(array[l],a);
    }
}

思路2:二分时用array【r】和array【mid】比较

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
    int length = array.length;
    if (length == 0)
        return 0;
    int pre = 0;
    int last = length - 1;
    while (pre < last){
        int mid = (pre + last) / 2;
        if (array[mid] > array[last])
        {
            pre = mid + 1;
        }
        else if (array[mid] < array[last]) {
            last = mid;
        }
        else {
            return array[mid];
        }
    }
    return array[pre];

    }
}
全部评论

相关推荐

点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务