二分法(快排+剪枝)

  • 由于只查找最小数字,每一趟快排后,只需对较小的左侧再次快排
  • 快排结束后,第一个元素即为min
# @param rotateArray int整型一维数组 
# @return int整型
#
class Solution:
    def minNumberInRotateArray(self , rotateArray: List[int]) -> int:
        # write code here
        array = self.quickSort(rotateArray,0,len(rotateArray)-1)
        return array[0]
    # 快速排序
    def quickSort(self,array,low,high):
        if low >= high:
            return
        # 记录轴心元素
        axis =  array[0]
        p,q = low,high
        while p < q:
            # 从右边开始,指针前移
            while p < q and array[q] >= axis:
                q -= 1
            array[p] = array[q]
            # 从左侧开始,指针后移
            while p < q and array[p] <= axis:
                p += 1
            array[q] = array[p]
        # 轴心元素放到中间停止位
        array[q] = axis
        # 对左侧再次快排
        self.quickSort(array,0,p)
        return array