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

/**
 * 题目:
 *      把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
 *      输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。
 *      例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
 *      NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
 */
public class P82_MinNumberInRotateArray {
    public int MinNumberInRotateArray(int[] array){
        int result = 0;
        if (array == null || array.length == 0) {
            return result;
        }
        int start = 0;
        int end = array.length - 1;


        while (array[start] >= array[end]) {
            int mid = (start + end) / 2;

            if (end - start == 1) {
                result = array[end];
                break;
            }
            if (array[start] == array[end] && array[start] == array[mid]) {
                result = OrderSearch(start, end, array);
                break;
            } else if (array[mid] >= array[start]) {
                start = mid ;
            } else if (array[mid] <= array[start]) {
                end = mid;
            }
        }
        return result;
    }

    public int OrderSearch(int start, int end, int[] array) {
        int result = array[start];
        for (int i = start + 1; i <= end; i++) {

            if (array[i] < result) {
                result = array[i];
            }
        }
        return result;
    }

    public static void main(String[] args) {
        int[] array = {1, 1, 0, 1, 1, 1, 1, 1};

        P82_MinNumberInRotateArray test = new P82_MinNumberInRotateArray();

        int result = test.MinNumberInRotateArray(array);
        System.out.print(result);
    }
}

猜你喜欢

转载自blog.csdn.net/Sunshine_liang1/article/details/82492850
今日推荐