剑指offer-查找旋转数组的最小数

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。

思路:二分查找
(1)若只有小半的数字被旋转过去,则中间数位于前半部的非递减数组内,此时中间数>=左边>=右边,最小数位于右边
(2)若有大半部的数字被旋转过去,则中间数位于后半部分的非递减数组内,此时中间数<=右边<=左边,最小数位于左边
(3)若中间数等于左边和右边的值,则需要在数组内暴力查找,例如重复数组

python代码实现:
class Solution:
def find(rotateArray,left,right):
minValue = rotateArray[left]
for i in range((left+1),(right+1)):
if rotateArray[i] minValue = rotateArray[i]
return minValue

def minNumberInRotateArray(self, rotateArray):
    # write code here
    if not rotateArray:
        return 0
    left = 0
    right = len(rotateArray)-1
    mid = left
    while rotateArra

你可能感兴趣的:(python学习,剑指Offer,剑指Offer)