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

2021-09-01 10:32:57 字數 696 閱讀 7951

題目描述:

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。

這裡採用的方法是在討論中學習到的方法,基於二分法的思想

用low和high指向兩邊,以及mid=low+(high-low)/2 指向中間

非減排序陣列的旋轉,表示,旋轉了之後,原本大的數旋轉到了陣列的前面,也就是從中間有個分界,這個分界就是原來有序陣列的最小值,為因此可以分為以下三種情況

1.如果位於mid的數大於high的數,則說明旋轉後的陣列,最小值在mid的右邊且不包括mid(因為mid已經比high大了),因此要在[mid+1,high]這個區間開始進行下一步的查詢

2.如果小於,則說明最小值在mid的左邊且包括mid(因為mid可能就是這個最小值),因此high=mid

3.如果等於,則說明這是乙個含有重複數字的陣列,那麼不能判斷最小值位於mid的左邊右邊或者就是mid,就應該high-1繼續進行遍歷查詢。

c++實現:

這個時間複雜度通常是o(logn),只有在陣列為所有數字都重複的情況下為o(n)。

class solution 

return rotatearray[low];

}};

劍指offer 旋轉陣列的最小數

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

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

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

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

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