剑指offer-面试题8:旋转数组中的最小数字

来源:互联网 发布:冷漠的文字软件 编辑:程序博客网 时间:2024/06/04 18:52

题目

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小元素为1.

public int Min(int[] nums){        if(nums.length==1){//只有一个元素            return nums[0];                 }        if(nums[nums.length-1]>nums[0]){//元素是已经排好序的了            return nums[0];        }        int i=0;        int j=nums.length-1;                while(j-i>1){            int mid=(j+i)/2;            //如果nums[i],nums[mid],nums[j]的数字是相等的,那么只能顺序查找            if(nums[i]==nums[mid] && nums[j]==nums[mid]){                return minInOrder(nums,i,j);            }            if(nums[mid]>=nums[i]){                i=mid;            }            else if(nums[mid]<=nums[j]){                j=mid;                          }        }               return nums[j];                 }    public int minInOrder(int[] nums,int i,int j){        int result=nums[i];        for(int k=i+1;k<=j;k++){            if(nums[k]<result)                result=nums[k];        }        return result;    }
0 0