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

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

目录

题目概述(简单难度)

题目链接:

点我进入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)




相关文章
|
人工智能 UED
DynamiCrafter:可实现任意类型静态图像转化为逼真动态视频
【2月更文挑战第17天】DynamiCrafter:可实现任意类型静态图像转化为逼真动态视频
622 1
DynamiCrafter:可实现任意类型静态图像转化为逼真动态视频
|
人工智能 并行计算 TensorFlow
同一个问题,Gemini、ChatGPT、Copilot、通义千问和文心一言会怎么答?
同一个问题,Gemini、ChatGPT、Copilot、通义千问和文心一言会怎么答?
|
消息中间件 负载均衡 Kafka
【Kafka面试演练】那Kafka消费者手动提交、自动提交有什么区别?
嗯嗯Ok。分区的作用主要就是为了提高Kafka处理消息吞吐量。每一个topic会被分为多个分区。假如同一个topic下有n个分区、n个消费者,这样的话每个分区就会发送消息给对应的一个消费者,这样n个消费者负载均衡地处理消息。同时生产者会发送消息给不同分区,每个分区分给不同的brocker处理,让集群平坦压力,这样大大提高了Kafka的吞吐量。面试官思考中…
360 4
|
运维 监控 Java
研发规范第十三讲:阿里 - 如何进行项目稳定性建设
研发规范第十三讲:阿里 - 如何进行项目稳定性建设
839 1
|
存储 Java 程序员
Java面试题:请解释Java中的永久代(PermGen)和元空间(Metaspace)的区别
Java面试题:请解释Java中的永久代(PermGen)和元空间(Metaspace)的区别
499 11
|
JavaScript 前端开发 索引
javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配
javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配
565 0
|
算法 关系型数据库 MySQL
深入理解MySQL中的JOIN算法
深入理解MySQL中的JOIN算法
|
Oracle Java 关系型数据库
面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?
面试知识点:notify是随机唤醒线程吗(唤醒线程顺序)?
402 0
|
消息中间件 SQL JavaScript
Flink 实例:电商用户行为实时分析
Flink 实例:电商用户行为实时分析
780 1
Flink 实例:电商用户行为实时分析
|
分布式计算 算法 数据处理
MapReduce的优缺点是什么?
MapReduce的优缺点是什么?
559 0