剑指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];
    }

目录
相关文章
|
4月前
|
算法
Leetcode 初级算法 --- 数组篇
Leetcode 初级算法 --- 数组篇
58 0
|
6月前
|
算法
LeetCode第53题最大子数组和
LeetCode第53题"最大子数组和"的解题方法,利用动态规划思想,通过一次遍历数组,维护到当前元素为止的最大子数组和,有效避免了复杂度更高的暴力解法。
LeetCode第53题最大子数组和
|
4月前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
35 4
|
4月前
|
机器学习/深度学习
Leetcode第48题(旋转图像)
这篇文章介绍了LeetCode第48题“旋转图像”的解题方法,通过原地修改二维矩阵实现图像的顺时针旋转90度。
45 0
Leetcode第48题(旋转图像)
|
4月前
|
索引
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
38 0
Leetcode第三十三题(搜索旋转排序数组)
|
4月前
|
算法 C++
Leetcode第53题(最大子数组和)
这篇文章介绍了LeetCode第53题“最大子数组和”的动态规划解法,提供了详细的状态转移方程和C++代码实现,并讨论了其他算法如贪心、分治、改进动态规划和分块累计法。
91 0
|
4月前
|
C++
【LeetCode 12】349.两个数组的交集
【LeetCode 12】349.两个数组的交集
31 0
|
6月前
|
算法
LeetCode第81题搜索旋转排序数组 II
文章讲解了LeetCode第81题"搜索旋转排序数组 II"的解法,通过二分查找算法并加入去重逻辑来解决在旋转且含有重复元素的数组中搜索特定值的问题。
LeetCode第81题搜索旋转排序数组 II
|
6月前
|
开发者 索引 Python
这些年背过的面试题——LeetCode
本文是技术人面试系列LeetCode篇,一文带你详细了解,欢迎收藏!
|
6月前
|
存储 算法
LeetCode第48题旋转图像
LeetCode第48题"旋转图像"的解题方法,通过两次翻转操作——先水平翻转再对角线翻转,实现了原地旋转矩阵的效果。
LeetCode第48题旋转图像

热门文章

最新文章