旋转数组中的最小数字11

package swordOffre.gaopengyu;

public class MinInRotateArray11 {
    public static void main(String[] args) {
//        int[] arr = new int[]{3, 4, 5, 1, 2};
//        int[] arr = new int[]{1,2,3,4,5,6,7};
        int[] arr = new int[]{3,3,3,0,3,3,3,3,3};
        int result = getMin(arr);
        System.out.println(result);
    }

    public static int getMin(int[] arr) {
        int low = 0;
        int high = arr.length - 1;
        int mid = 0;
        while (arr[low] >= arr[high]) {
            if (high - low == 1) {
                mid = high;
                break;
            }
            mid = (low + high) / 2;
            if (arr[low] == arr[high] && arr[low] == arr[mid]) {
                mid = getMinInOrder(arr, low, high);
                break;
            } else {
                if (arr[low] >= arr[mid]) {
                    high = mid;
                }
                if (arr[high] <= arr[mid]) {
                    low = mid;
                }
            }
        }
        return arr[mid];
    }

    public static int getMinInOrder(int[] arr, int low, int high) {
        int min = arr[low];
        int result = low;
        for (int i = low + 1; i <= high; i++) {
            if (min > arr[i]) {
                min = arr[i];
                result = i;
            }

        }
        return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值