旋转数组的最小数字

题目描述
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

方法一
顺序查找

    public int minNumberInRotateArray(int [] array) {
    	if(array.length > 0) {
    		int temp = array[0];
    		for (int i = 1; i < array.length; i++) {
				if(array[i] < temp) {
					temp = array[i];
				}
			}
    		return temp;
    	}
    	else return 0;
    }

方法二
二分查找

    public int minNumberInRotateArray_2(int [] array) {
    	if(array.length > 0) {
    		int left = 0;
    		int right = array.length - 1;
    		int mid = -1;
    		while(array[left] >= array[right]) {
    			if(right - left == 1) {
    				mid = right;
    				break;
    			}
    			mid = left + (right - left) / 2;
    			
    			if(array[mid] >= array[left]) 
    				left = mid;
    			if(array[mid] <= array[right])
    				right = mid;
    		}
    		return array[mid];
    	}
    	else return 0;
    }
posted @ 2019-03-18 14:38  如是说  阅读(129)  评论(0编辑  收藏  举报