二分法(快排+剪枝)
- 由于只查找最小数字,每一趟快排后,只需对较小的左侧再次快排
- 快排结束后,第一个元素即为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