Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >剑指 Offer 11. 旋转数组的最小数字

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

作者头像
Vincent-yuan
发布于 2021-07-01 07:54:30
发布于 2021-07-01 07:54:30
26000
代码可运行
举报
文章被收录于专栏:Vincent-yuanVincent-yuan
运行总次数:0
代码可运行

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

输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。

例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。

示例 1:

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

题解:

二分查找法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
由题意知:
   这相当于是两个有序的递增数组,拼到一起了。
   因为是递增的,所以我们都与右边的元素比较。
   如果中间位置的值大于右边位置的值,则说明左边是递增的,边界在右边;left = mid+1;
   如果中间位置的值小于右边位置的值,则说明右边是递增的,边界应该在左边;当然也有可能边界时中间位置,此时right = mid;
   如果中间位置的值等于右边位置的值,说明我们可以把右边理解为递增的,但是右边界移动到中间位置-1;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class offer11 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] inputs = new int[]{3,4,5,1,2};
        System.out.println(minArray(inputs));
     }

    /**
     * 由题意知:
     * 这相当于是两个有序的递增数组,拼到一起了。
     * 因为是递增的,所以我们都与右边的元素比较。
     * 如果中间位置的值大于右边位置的值,则说明左边是递增的,边界在右边;left = mid+1;
     * 如果中间位置的值小于右边位置的值,则说明右边是递增的,边界应该在左边;当然也有可能边界时中间位置,此时right = mid;
     * 如果中间位置的值等于右边位置的值,说明我们可以把右边理解为递增的,但是右边界移动到中间位置-1;
     * @param numbers
     * @return
     */
    public static int minArray(int[] numbers) {
        int n = numbers.length;
        int left = 0,right = n-1;
        while(left<right){
            int mid = left + (right-left)/2;
            if(numbers[mid]>numbers[right]){
                left = mid+1;
            }else if(numbers[mid]<numbers[right]){
                right = mid;
            }else{
                right -= 1;
            }
        }

        return numbers[left];
    }
    
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
剑指 Offer 11. 旋转数组的最小数字
如果中间值处于前面的递增子数组,那么中间值应该大于等于最左边的值,那么最小值应该在中间值的右边。
SakuraTears
2022/01/13
1660
剑指 Offer 11. 旋转数组的最小数字
牛客网-旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
手撕代码八百里
2020/07/28
3120
一天一大 leet(旋转数组的最小数字)难度:简单-Day20200721
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为 1。
前端小书童
2020/09/24
1620
一天一大 leet(旋转数组的最小数字)难度:简单-Day20200721
【LeetCode】旋转数组的最小数字day08
https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/
袁新栋-jeff.yuan
2020/08/26
4710
剑指Offer(五)--旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
秦怀杂货店
2022/02/15
1600
剑指Offer(五)--旋转数组的最小数字
剑指Offer面试题:7.旋转数组的最小数字
  这道题最直观的解法并不难,从头到尾遍历数组一次,我们就能找出最小的元素。这种思路的时间复杂度显然是O(n)。但是这个思路没有利用输入的旋转数组的特性,肯定达不到面试官的要求。
Edison Zhou
2018/08/20
3560
剑指Offer面试题:7.旋转数组的最小数字
Sword To Offer 006 - 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
Reck Zhang
2021/08/11
2310
LeetCode题解—旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
码上积木
2021/02/08
9630
剑指 offer|11. 旋转数组的最小数字
如果针对一个未排序的数组,如果想要找出最小值,一个简单的方法就是先排序,再取第一个值。比如:
孟君
2023/02/23
1940
剑指 offer|11. 旋转数组的最小数字
剑指offer | 面试题8:旋转数组的最小数字
如下图所示,寻找旋转数组的最小元素即为寻找 右排序数组 的首个元素 nums[x] ,称 x 为 旋转点 。
千羽
2021/12/29
2480
剑指offer | 面试题8:旋转数组的最小数字
[剑指offer][Java]旋转数组的最小数字
链接:https://www.nowcoder.com/questionTerminal/9f3231a991af4f55b95579b44b7a01ba 来源:牛客网
蛮三刀酱
2019/03/26
4860
图解LeetCode——剑指 Offer 11. 旋转数组的最小数字
给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的 最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。
爪哇缪斯
2023/05/10
1590
图解LeetCode——剑指 Offer 11. 旋转数组的最小数字
剑指 Offer(C++版本)系列:剑指 Offer 11 旋转数组的最小数字
同步GitHub在此 ? https://github.com/TeFuirnever/GXL-Skill-Tree 剑指 Offer(C++版本)系列:总目录和一些提高效率的说明 剑指 Offer(
我是管小亮
2021/07/20
3460
LeetCode-面试题11-旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
benym
2022/07/14
2190
leetcode - 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1
江涛学编程
2020/07/24
3620
剑指offer第9题:旋转数组的最小数字
题目首先给我们一个排序的数组,然后将其分为两半,把后面的数组分为两半之后,对这两半进行旋转。然后让我们找到旋转数组的最小值,即未旋转之前的数组的第一个值。
鹏-程-万-里
2020/07/29
3690
剑指Offer LeetCode 面试题11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
手撕代码八百里
2020/07/28
3260
【每日一题】【leetcode】25. 数组-旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。 难易程度:easy
aneutron
2022/08/10
1680
剑指Offer - 面试题11. 旋转数组的最小数字(二分查找)
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。
Michael阿明
2020/07/13
2750
算法-旋转数组的最小数字
本文讨论了旋转数组的最小值问题,提出了一种有效的算法解决方案,并通过示例进行了详细的分析和实现。该算法的时间复杂度为O(log n),可以快速地找到旋转数组的最小值。
chaibubble
2018/01/02
7270
算法-旋转数组的最小数字
推荐阅读
相关推荐
剑指 Offer 11. 旋转数组的最小数字
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验