力扣刷题记录_剑指offer

TiaNa_na

关注

阅读 67

2022-03-20

剑指offer

1.剑指 Offer 11. 旋转数组的最小数字

//1.时间复杂度O(n)
    public int minArray(int[] numbers) {
        if(numbers == null || numbers.length == 0) return -1;

        for(int i = 0;i < numbers.length - 1;i ++){
            if(numbers[i] > numbers[i + 1]){
                return numbers[i + 1];
            }
        }

        return numbers[0];
    }
//2.二分法查找
    /**
     * 整个数组必然可以分为左排序数组和右排序数组,并且左排序数组中
     * 的每个数一定大于右排序数组的每个数
     * @param numbers
     * @return
     */
    public int minArray2(int[] numbers) {
        int left = 0,right = numbers.length - 1;
        //这里改成left<=right也是可以的
        while(left < right){
            int mid = left + (right - left) / 2;
            if(numbers[mid] > numbers[right]){
                left = mid + 1;
            }else if(numbers[mid] < numbers[right]){
                right = mid;
            }else{
                //如果发现中间值和右边值相等,右边范围缩小1
                right = right - 1;
            }
        }

        return numbers[left];
    }

精彩评论(0)

0 0 举报