旋转数组的最小数字(简单难度)

简介: 旋转数组的最小数字(简单难度)

目录

题目概述(简单难度)

题目链接:

点我进入leetcode

思路与代码

思路展现

使用经典二分法,题解直接看此链接即可:

点我进入链接

代码示例

注意此处我们将代码进行了改动,并附上改动原因

public class Solution {
    // [3, 4, 5, 1, 2]
    // [1, 2, 3, 4, 5]
    // 不能使用左边数与中间数比较,这种做法不能有效地减治
    // [1, 2, 3, 4, 5]
    // [3, 4, 5, 1, 2]
    // [2, 3, 4, 5 ,1]
    public int minArray(int[] numbers) {
        int len = numbers.length;
        if (len == 0) {
            return 0;
        }
        int left = 0;
        int right = len - 1;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (numbers[mid] > numbers[right]) {
                // [3, 4, 5, 1, 2],mid 以及 mid 的左边一定不是最小数字
                // 下一轮搜索区间是 [mid + 1, right]
                left = mid + 1;
            } else if (numbers[mid] == numbers[right]) {
                // 只能把 right 排除掉,下一轮搜索区间是 [left, right - 1]
                right = right - 1;
            } else {
                // 此时 numbers[mid] < numbers[right]
                // mid 的右边一定不是最小数字,mid 有可能是,下一轮搜索区间是 [left, mid]
                right = mid;
            }
        }
        // 最小数字一定在数组中,因此不用后处理
        return numbers[left];
    }
}

2.png

注意事项

1:

注意此处我们再求中间下标的时候会有很多种求法,例如如下写法:

int mid = left + (right - left) / 2

原因如下所示:

2:

这里的符号即可写小于号,也可以写小于等于号.

while (left <= right)




相关文章
|
2月前
|
Java
【剑指offer】-旋转数组的最小数字-06/67
【剑指offer】-旋转数组的最小数字-06/67
|
2月前
|
存储
Leetcode2336 无限集中的最小数字
Leetcode2336 无限集中的最小数字
判断一个数字是否可以表示成三的幂的和(难度:中等)
判断一个数字是否可以表示成三的幂的和(难度:中等)
|
2月前
|
存储
leetcode-6113:无限集中的最小数字
leetcode-6113:无限集中的最小数字
27 0
|
10月前
剑指offer-10.旋转数组最小的数字
剑指offer-10.旋转数组最小的数字
33 0
|
11月前
旋转数组的最小数字
旋转数组的最小数字
35 0
|
算法
剑指offer 10. 旋转数组的最小数字
剑指offer 10. 旋转数组的最小数字
37 0
|
算法 Java
旋转数组的最小数字(剑指offer 11)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
旋转数组的最小数字(剑指offer 11)
11.旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
72 0
11.旋转数组的最小数字
使用二分法解决旋转数组的最小数字的问题
使用二分法解决旋转数组的最小数字的问题
74 0
使用二分法解决旋转数组的最小数字的问题