剑指 Offer 11. 旋转数组的最小数字

Easy

方法一(暴力)

思路

不管怎么旋转交换数组,最小的永远都是那个最小的

时间复杂度\(O(n)\)

所以,直接返回最小值,AC!

代码

python3

class Solution:
    def minArray(self, numbers: List[int]) -> int:
      return min(numbers)

方法二(二分搜索)

思路

题目中数组形成的方式是,在一个有序的数组中,截取的前面一段,放到了后面。那我们只要找到转换的这个分割点,就是我们想要的答案。

以上,尝试写一下代码,AC!

代码

python3

class Solution:
  def minArray(self, numbers: List[int]) -> int:
    i = 0
    j = len(numbers) - 1
    while i < j:
      mid = i + (j-i) // 2 
      if numbers[mid] < numbers[j]:
        j = mid
      elif numbers[mid] > numbers[j]:
        i = mid + 1
      else:
        j -= 1
    return numbers[i]