【Leetcode刷题Python】剑指 Offer 11. 旋转数组的最小数字

简介: 解决剑指Offer 11题 "旋转数组的最小数字" 的三种Python实现方法:直接使用min函数、线性查找分界点和二分查找法,以找出旋转数组中的最小元素。

1 题目

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

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

注意,数组 [a[0], a[1], a[2], …, a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], …, a[n-2]] 。

示例 1:

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

示例 2:

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

2 解析

(1)直接返回用min,返回最小值

(2)for循环查找分界点,从前往后,直到找到numbers[i-]>numbers[i]时,返回numbers[i],就是最小值

(3)二分查找
具体看视频讲解,视频很直观
https://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/solution/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-by-leetcode-s/

3 python实现

(1)方法一

return min(numbers)

(2)方法二

 for i in range(1,len(numbers)):
     if numbers[i-1]>numbers[i]:
         return numbers[i]
 return numbers[0]

(3)方法三

class Solution:
    def minArray(self, numbers: List[int]) -> int:
        l,r = 0,len(numbers)-1
        while l<r:
            mid = l+(r-l)//2
            # 分界点在左边
            if numbers[mid]<numbers[r]:
                r = mid
            # 分界点在右边
            elif  numbers[mid]>numbers[r]:
                l = mid+1
            else:
                # 无法二分,右指针左移一个,去重复值
                r -=1

        return numbers[l]
目录
相关文章
|
15天前
|
存储 数据处理 索引
如何删除 Python 数组中的值?
【8月更文挑战第29天】
22 8
|
15天前
|
索引 Python
向 Python 数组添加值
【8月更文挑战第29天】
25 8
|
15天前
|
存储 缓存 C语言
|
15天前
|
存储 测试技术 Python
Python 数组和列表有什么区别?
【8月更文挑战第29天】
22 4
|
16天前
|
Python
python在列表、元素、字典、集合和numpy的数组前加上星号 * 是什么含义,以及*args和**kwargs的使用
python在列表、元素、字典、集合和numpy的数组前加上星号 * 是什么含义,以及*args和**kwargs的使用
22 0
|
1月前
|
Python
Python 数组比较
Python 数组比较
26 0
|
1月前
|
索引 Python
[Python]数组基础
[Python]数组基础
|
1月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
38 6
|
1月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
65 2
|
1月前
|
索引 Python
【Leetcode刷题Python】从列表list中创建一颗二叉树
本文介绍了如何使用Python递归函数从列表中创建二叉树,其中每个节点的左右子节点索引分别是当前节点索引的2倍加1和2倍加2。
32 7