剑指Offer LeetCode 面试题11. 旋转数组的最小数字

简介: 剑指Offer LeetCode 面试题11. 旋转数组的最小数字

面试题11. 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [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

解题1(超时)

可能是自己刷题少的原因,导致思路很少

第一个想到的思路,就是:

例如有一个数组A

1:拿到A[0]与A[A.length-1]作比较,

2:如果A[0]>=A[A.length-1],就把这个数字想办法放在最后。

自己测试结果是对的,但是提交的时候,显示超时,思路应该是没问题的,就是笨了许多

public int minArray(int[] numbers) {
        Boolean bool = true;
        int i = 0;
        int j = numbers.length - 1;
        int tmp;
        while (bool){
            //如果第一个比最后一个大,就交换位置
            if(numbers[i] >= numbers[j]){
                tmp = numbers[i];
        //忘前移动数组
                for (int k = 0; k < numbers.length-1; k++) {
                    numbers[k] = numbers[k+1];
                }
                numbers[j] = tmp;
            }else{
                bool = false;
            }
        }
        return numbers[0];
    }

解题2 解答

我就纳闷了,不是要求要旋转数组吗?怎么变成找最小值了。

下面这是在解答区找到的一个,很好的思路,适合当模板

static public int minArr(int[] numbers){
        int i = 0, j = numbers.length - 1;
        while (i < j) {
            int m = (i + j) / 2;//拿到中间的位置
            if (numbers[m] > numbers[j]){ //拿到中间的位置之后,把中间的位置和最后的位置做比较
                i = m + 1;
            } else if (numbers[m] < numbers[j]){
                j = m;
            } else{
                j--;
            }
        }
        return numbers[i];
    }

解题3

我也是很无奈,不是说好的旋转数组吗?

这样都能提交成功

public int minArray(int[] numbers) {
        Arrays.sort(numbers);
        return numbers[0];
    }

目录
相关文章
|
3月前
|
C语言
【Amazon 面试题1】一个数组,里面得数出现的次数是偶数次,只有一个数出现的次数是奇数次,找出那个出现奇数次的数
本文介绍了解决Amazon面试题的一种方法,即在一个所有数字出现次数都是偶数,除了一个数字出现奇数次的数组中,利用异或运算的性质找出出现奇数次的数字,并提供了C语言实现的代码示例。
62 1
|
3月前
|
Java
Java 基础语法-面试题(54-63道)(数组+类+包)
Java 基础语法-面试题(54-63道)(数组+类+包)
41 16
|
3月前
|
开发者 索引 Python
这些年背过的面试题——LeetCode
本文是技术人面试系列LeetCode篇,一文带你详细了解,欢迎收藏!
|
3月前
|
安全 编译器 C++
【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数
【剑指offer】2.2编程语言(p22-p25)——面试题1:string赋值运算函数
|
4月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
4月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
52 6
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
102 2