面試11題:
題目:
把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。 輸入一個非遞減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該數組的最小值為1。 NOTE:給出的所有元素都大於0,若數組大小為0,請返回0
解題思路:二分查找,以及分情況考慮(稍顯麻煩)詳見:劍指offer P83
解題代碼:
# -*- coding:utf-8 -*- class Solution: def minNumberInRotateArray(self, rotateArray): # write code here if not rotateArray: return if len(rotateArray)==0: return 0 index1=0 index2=len(rotateArray)-1 indexMid=index1 while (rotateArray[index1]>=rotateArray[index2]): if (index2-index1)==1: indexMid=index2 break indexMid = (index1+index2)//2 # 如果index1 index2 indexMid三者相等 if rotateArray[index1]==rotateArray[index2] and rotateArray[indexMid]==rotateArray[index1]: return self.minValue(rotateArray,index1,index2) if rotateArray[indexMid]>=rotateArray[index1]: index1=indexMid if rotateArray[indexMid]<=rotateArray[index2]: index2=indexMid return rotateArray[indexMid] def minValue(self,rotateArray,index1,index2): res=rotateArray[index1] for i in range(index1+1,index2+1): if res>rotateArray[i]: res=rotateArray[i] return res