leedcode做题总结, 题目Find Minimum in Rotated Sorted Array I/II

来源:互联网 发布:制作微课都用哪些软件 编辑:程序博客网 时间:2024/06/05 17:31

这两道题类似于之前的旋转数列search,使用二分法即可,但要注意的是由于数列不是完全有序,所以需要处理形如[2,1]的情况,同时对于第二题,要处理形如[2,1,2,2,2]的情况。

public class Solution {    public int findMin(int[] num) {        if(num==null)            return 0;        int l=0, r=num.length-1;        int m;        int min = num[0];        while(l<r){            m=(l+r)/2;            if(num[l]<num[m]){                min=Math.min(num[l],min);                l=m+1;            }            else if(num[l]>num[m]){                min=Math.min(num[m],min);                r=m-1;            }else{                //only when m==l and l = r-1, using l++ to break the loop.                l++;            }        }//because the array not in order. for example, [2,1], we need to compare min with num[m+1]          min = Math.min(num[r],min);        return min;    }}



class Solution1 {    public int findMin(int[] num) {        if(num==null)            return 0;        int l=0, r=num.length-1;        int m;        int min = num[0];        while(l<r){            m=(l+r)/2;            if(num[l]<num[m]){                min=Math.min(num[l],min);                l=m+1;            }            else if(num[l]>num[m]){                min=Math.min(num[m],min);                r=m-1;            }else{                //when m==l and l = r-1, using l++ to break the loop.                //when m!=l, using l++ to find num[l]!=num[m];                min = Math.min(num[m],min);                l++;                if(l<num.length && num[l]<num[l-1])                    return num[l];            }        }//because the array not in order. for example, [2,1], we need to compare min with num[m+1]        min = Math.min(num[r],min);        return min;    }}




0 0
原创粉丝点击