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

简介: AC 剑指 Offer 11. 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。

给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为1。

示例 1:

输入:[3,4,5,1,2]
输出:1
示例 2:

输入:[2,2,2,0,1]
输出:0

class Solution {
    /**
     * @Title: minArray
     * @Description: 二分查找
     * @author: itbird
     * @date 2022年3月15日 下午7:45:43
     * @param numbers
     * @return int 时间复杂度: O(logn) 空间复杂度: O(1)
     */
    public int minArray(int[] numbers) {
        if (numbers == null || numbers.length == 0) {
            return -1;
        }

        // 使用二分查找
        int min = binarySearch(0, numbers.length - 1, numbers);
        return min;
    }

    private int binarySearch(int left, int right, int[] numbers) {
        // 此处使用二分查找,最大的难点,在于数组现在是分为两个有序数组,所以针对于不同的情况,我们需要做处理

        while (left < right) {
            int mid = (left + right) / 2;
            if (numbers[right] > numbers[mid]) {
                // 如果右边大于中间,说明最小值在中间的左端,我们此时舍弃右半部分
                right = mid;
            } else if (numbers[right] < numbers[mid]) {
                // 如果右边小于中间,说明最小值在中间的右端,我们此时舍弃左半部分
                left = mid + 1;
            } else {
                // 如果右边的值等于中间的值,此时我们由于重复元素的存在,我们不能舍弃左右
                right--;
            }
        }
        return numbers[left];
    }

    /**
     * @Title: minArray
     * @Description: 暴力查找
     * @author: itbird
     * @date 2022年3月15日 下午7:45:43
     * @param numbers
     * @return int 时间复杂度: O(N) 空间复杂度: O(1)
     */
    public int minArray1(int[] numbers) {
        if (numbers == null || numbers.length == 0) {
            return -1;
        }

        int min = numbers[0];
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] < min) {
                min = numbers[i];
            }
        }
        return min;
    }
}
目录
相关文章
|
机器学习/深度学习 自然语言处理 算法
在Python中进行自然语言处理(NLP)的文本预处理
在Python中进行自然语言处理(NLP)的文本预处理
573 1
|
3月前
|
存储 弹性计算 安全
阿里云最新活动参考:云服务器特惠和优惠券活动内容及规则介绍
2026年阿里云推出多项云服务器和优惠券相关活动,显著降低上云门槛:个人开发者和中小企业可38元抢购轻量应用服务器(2核2G、200M带宽);“99计划”提供99元/年经济型ECS及199元/年通用算力型U1实例;云产品组合购活动提供一站式解决方案,覆盖建站、安全、开发等场景。此外,新迁上云可享5亿算力补贴,出海企业可申请最高100万元扶持,实名认证用户还可领取165元满减券包,进一步节约上云成本。
1133 3
|
监控 测试技术 数据库连接
RunnerGo API 性能测试实战:从问题到解决的全链路剖析
API性能测试是保障软件系统稳定性与用户体验的关键环节。本文详细探讨了使用RunnerGo全栈测试平台进行API性能测试的全流程,涵盖测试计划创建、场景设计、执行分析及优化改进。通过电商平台促销活动的实际案例,展示了如何设置测试目标、选择压测模式并分析结果。针对发现的性能瓶颈,提出了代码优化、数据库调优、服务器资源配置和缓存策略等解决方案。最终,系统性能显著提升,满足高并发需求。持续关注与优化API性能,对系统稳定运行至关重要。
|
10月前
|
测试技术 API 开发者
Postman下载与安装全攻略:简单几步,高效上手!
本文介绍了如何从官方渠道下载并安装Postman,详细列出了安装步骤与注意事项,同时对比了国产工具Apifox的优势,探讨了API工具的发展趋势。
|
JavaScript
【VUE异常】el-popconfirm失效,@confirm事件不生效,点击没有任何反应,刷新页面才能点击
【VUE异常】el-popconfirm失效,@confirm事件不生效,点击没有任何反应,刷新页面才能点击
874 0
|
机器学习/深度学习 搜索推荐 算法
【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解
【阿旭机器学习实战】【37】电影推荐系统---基于矩阵分解
|
SQL 缓存 JavaScript
ElasticSearch进阶:一文全览各种ES查询在Java中的实现(上)
ElasticSearch进阶:一文全览各种ES查询在Java中的实现(上)
|
Linux Docker 容器
CentOS7系统安装最新版本docker实战
CentOS7系统安装最新版本docker实战
2412 0
CentOS7系统安装最新版本docker实战
|
编解码 API
Halcon形态学操作、区域处理相关常用API
Halcon形态学操作、区域处理相关常用API
2003 0
Halcon形态学操作、区域处理相关常用API
|
5G 安全
带你读《5G NR标准:下一代无线通信技术》之三:5G频谱
本书对NR标准进行了描述。NR标准是在2018年春末由3GPP制定的新一代无线接入技术标准。本书内容比较偏底层,阅读时结合协议去读会有更大的收获,而且全书深入浅出的风格非常好,可以使读者读后知其然又知其所以然!

热门文章

最新文章