Java求旋转数组的最小值

来源:互联网 发布:垦丁音乐节 知乎 编辑:程序博客网 时间:2024/05/17 09:43

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

可以借助二分查找法的思想。

/** * @author 16026 * */public class Min {    public static int min(int[] array) {        int start = 0;        int end = array.length - 1;        int mid = start;        if (array.length == 0)            return 0;        while (array[start] >= array[end]) {            if (end == start + 1) {                mid = end;                break;            }            mid = (start + end) >> 1;//除以2操作            if (array[mid] >= array[start])                start = mid;            else if (array[mid] <= array[end])                end = mid;        }        return array[mid];    }    /*     * 以上方法也有缺陷,如{0,1,1,1,1}的一个旋转数组{1,0,1,1,1},以上方法便无法得出最小值。     * bug出现在while循环的第二个if语句。 当start、mid、end三个下标对应的值相等时,便需要单独判断。     */    /**     * 改进后的方法     * @param array     * @return     */    public static int min2(int [] array){        int start = 0;        int end = array.length - 1;        int mid = start;        if (array.length == 0)            return 0;        while (array[start] >= array[end]) {            if (end == start + 1){                    mid = end;                    break;            }               mid = (start + end) >> 1;            if(array[start] == array[mid] && array[mid] == array[end]){                return MinInArray(array,start,end);            }            if (array[mid] >= array[start])                start = mid;            else if (array[mid] <= array[end])                end = mid;        }        return array[mid];    }    /**     * 求一个整型数组里面的最小值     * @param array     * @param start     * @param end     * @return     */    private static int MinInArray(int[] array, int start, int end) {        // TODO Auto-generated method stub        int result = array[start];        for(int i = start + 1; i<=end; i++){            if(result > array[i])                result = array[i];        }        return result;    }    public static void main(String []args){        int [] array = {1,0,1,1,1,1};        System.out.println(min(array));        System.out.println(min2(array));    }}

运行结果为:
这里写图片描述

0 0
原创粉丝点击