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

    }
}
全部评论

相关推荐

见见123:简历没有啥问题,是这个社会有问题。因为你刚毕业,没有工作经历,现在企业都不要没有工作经历的。社会病了。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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