【LeetCode】面试题11. 旋转数组的最小数字
2021-01-15 12:11
标签:区间 相等 http numbers 怎么 误区 返回值 序列 object 关于旋转数组有各种变种问题:是否有重复元素、寻找最大值最小值、寻找旋转点下标(旋转点的值等于最小值)、查找给定元素。本题就是对有重复元素的旋转数组,寻找其最小值。 循环二分,middle = (left + right) // 2(向下取整)为每次二分的中点,恒有left
返回值,当left = right时跳出循环,返回num[left]即可 特殊情形 寻找最小值时不可以让num[middle]和num[left]进行对比,因为对比的目的是判断middle处于哪边序列,当只有一个序列时会出现问题。寻找最大值时和num[left]比较,寻找最小值时和num[right]比较。 误区: 判断middle处于哪边序列中时,只需要和一边比较就可以,不需要同时比较left和right。从结果上看其实并不需要很复杂很多的判断条件,一开始判断条件过多容易混乱,需要从多种条件中抽离出关键点。 Python 【LeetCode】面试题11. 旋转数组的最小数字 标签:区间 相等 http numbers 怎么 误区 返回值 序列 object 原文地址:https://www.cnblogs.com/cling-cling/p/12935855.html题目:
思路:
首先想到二分查找没问题,关键在于怎么通过判断middle元素的相对大小去逐渐缩小搜索区间。如下图所示(无重复元素)
代码:
class Solution(object):
def minArray(self, numbers):
"""
:type numbers: List[int]
:rtype: int
"""
left = 0
right = len(numbers) - 1
while left numbers[right]:
left = middle + 1
elif numbers[middle]
相关问题