讨论/《画解剑指 Offer》 - 剑指 Offer 11. 旋转数组的最小数字 - 解决方案/
《画解剑指 Offer》 - 剑指 Offer 11. 旋转数组的最小数字 - 解决方案
共 10 个回复

这个也过了

class Solution {
    public int minArray(int[] numbers) {
        for(int i = 1;i < numbers.length ;i++){
            if(numbers[i] < numbers[i-1]){
                return numbers[i];
            }
        }
        return numbers[0];
    }
}
8

不看题的吗?

1

这个左侧指的是需要搬到数组末尾的那部分,比如你举的例子【1,2】,最小值是左侧的1

[0,2,3,7,8,1,2,6]不是由递增数组旋转来的。汗

这种旋转数组求最小值还是让中间的和右边的比较比较稳定。

其实最后返回值应该min(numbers[left],numbers[0]),毕竟不是纯递增,例如[0,2,3,7,8,1,2,6],这样按照二分法找出1是最小,但实际上第一个0,才是最小的。

当 numbers[mid] > numbers[right]​ 时,说明最小值在 [mid, right]​ 区间中,则令 left = mid + 1,用于下一轮计算
是不是应该改为:
当 numbers[mid] > numbers[right]​ 时,说明最小值在 (mid, right]​ 区间中,则令 left = mid + 1,用于下一轮计算
或者改为:

当 numbers[mid] > numbers[right]​ 时,说明最小值在 [mid+1], right]​ 区间中,则令 left = mid + 1,用于下一轮计算

因为数组是升序的,所以最小值一定靠近左侧,而不是右侧,你好,我不太理解这句话,这个题处理的不是旋转之后的升序数组吗?包括您举的例子[1,2,2,2,2],若把它旋转为[2,2,2,1,2],那这个最小值就会出现在右侧呀?

输入的是一个原本有序的数组进行了旋转操作

不懂就就问,看例子数组不是无序的吗 怎么可以用二分查找?