LeetCode-剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为1。
class Solution:
def minArray(self, numbers: List[int]) -> int:
num = len(numbers)
left = 0
right = num - 1
mid = left
while numbers[left] >= numbers[right]:
# left和right相邻时退出
if right - left == 1:
mid = right
break
mid = (right + left) // 2
# 特殊情况,左中右都相等,只能顺序判断
if numbers[mid] == numbers[left] and numbers[left] == numbers[right]:
mid = self.normal(numbers, left, right)
break
if numbers[mid] >= numbers[left]:
left = mid
elif numbers[mid] <= numbers[right]:
right = mid
return numbers[mid]
def normal(self, numbers, left, right):
minnum = 0
for n in range(left, right, 1):
if numbers[n] < numbers[n+1]:
minnum = n
return minnum
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix