劍指offer 旋轉陣列的最小數字

2021-09-29 19:57:28 字數 1175 閱讀 1477

題目描述

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如陣列為的乙個旋轉,該陣列的最小值為1。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

思路:二分法,對於有序(全域性有序或部分有序)陣列採用二分法。設定兩個指標l(指向前半部分較大的有序陣列),r(指向後半部分較小的有序陣列)。找到中間index的元素,分別跟l和r指向的元素進行比較,如果比l大或等於,則說明最小元素位於後半部分,立即l=mid,反之則立即r=mid。迴圈終止條件是l和r相鄰,此時陣列中最小元素就是r所指元素。

class

solution

return rotatearray[r];}

};

//如果沒有發生旋轉,第乙個數就是陣列最小的數

class

solution

mid=

(l+r)/2

;if(rotatearray[l]

<=rotatearray[mid]

) l=mid;

else

r=mid;

}return rotatearray[mid];}

};

//無法判斷最小數在前半段還是後半段,只能採用順序查詢的方式

class

solution

mid=

(l+r)/2

;if(rotatearray[l]

==rotatearray[r]

&&rotatearray[mid]

==rotatearray[l]

)return

min(rotatearray)

;else

if(rotatearray[l]

<=rotatearray[mid]

) l=mid;

else

r=mid;

}return rotatearray[mid];}

intmin

(vector<

int> rotatearray)

return min;}}

;

劍指offer 旋轉陣列的最小數

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。public class test system.out.pr...

劍指offer 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個排好序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。分析 這道題最直觀的解法並不難。從頭到尾遍歷陣列一次,就能找出最小的元素,時間複雜度顯然是o n 但這個思路沒有利用輸入陣列的特性...

劍指offer 旋轉陣列的最小數字

記錄來自 劍指offer 上的演算法題。題目描述如下 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個選擇,輸出旋轉陣列的最小元素。例如陣列是的乙個旋轉,該陣列的最小值是1。這裡可以採用二分查詢的想法,使用兩個指標,乙個指向第乙個元素,乙個指向末尾元素,...