美文网首页
剑指 Offer 第11题:旋转数组的最小数字

剑指 Offer 第11题:旋转数组的最小数字

作者: 放开那个BUG | 来源:发表于2022-07-05 15:16 被阅读0次

1、前言

题目描述

2、思路

这道题如果按照 [3,4,5,1,2] 那种,其实还算好做。但是偏偏有 [10, 1, 2, 10, 10] 那种,所以只能确定的是,只能使用 right 而非 left 作为 target。

  • 如果 numbers[mid] > numbers[right],则 mid 以及 mid 的左边一定不是最小数字
  • 如果 numbers[mid] == numbers[right],只能把 right 排除掉,下一轮搜索区间是 [left, right - 1]
  • 如果 numbers[mid] < numbers[right],mid 的右边一定不是最小数字,mid 有可能是,下一轮搜索区间是 [left, mid]

3、代码

public int minArray(int[] numbers) {
        int left = 0, right = numbers.length - 1;
        while(left < right){
            int mid = (left + right) / 2;
            if(numbers[mid] > numbers[right]){
                left = mid + 1;
            }else if(numbers[mid] == numbers[right]){
                right = right - 1;
            }else{
                right = mid;
            }
        }

        return numbers[left];
    }

相关文章

网友评论

      本文标题:剑指 Offer 第11题:旋转数组的最小数字

      本文链接:https://www.haomeiwen.com/subject/xxalyrtx.html