把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。
思路:劍指offer中有這道題目的分析。這是一道二分查詢的變形的題目。
旋轉之後的陣列實際上可以劃分成兩個有序的子陣列:前面子陣列的大小都大於後面子陣列中的元素
注意到實際上最小的元素就是兩個子陣列的分界線。本題目給出的陣列一定程度上是排序的,因此我們試著用二分查詢法尋找這個最小的元素。
做法:二分查詢
當輸入旋轉陣列本身,直接返回第乙個元素
當二分查詢的首末指標以及中間數值相等時,只能順序查詢
複雜度為o(n)的解法
二分查詢:
# -*- coding:utf-8 -*-
class solution:
def minnumberinrotatearray(self, rotatearray):
# write code here
if rotatearray == :
return 0
length = len(rotatearray)
left = 0
right = length-1
while rotatearray[left]>=rotatearray[right]:
mid = (left+right)/2
if right-left==1:
return rotatearray[right]
if rotatearray[mid]>=rotatearray[left]:
left = mid
if rotatearray[mid]<=rotatearray[right]:
right = mid
return rotatearray[right]
劍指offer 旋轉陣列的最小數
題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。public class test system.out.pr...
劍指offer 旋轉陣列的最小數字
題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個排好序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。分析 這道題最直觀的解法並不難。從頭到尾遍歷陣列一次,就能找出最小的元素,時間複雜度顯然是o n 但這個思路沒有利用輸入陣列的特性...
劍指offer 旋轉陣列的最小數字
記錄來自 劍指offer 上的演算法題。題目描述如下 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個選擇,輸出旋轉陣列的最小元素。例如陣列是的乙個旋轉,該陣列的最小值是1。這裡可以採用二分查詢的想法,使用兩個指標,乙個指向第乙個元素,乙個指向末尾元素,...