面試題11 旋轉陣列的最小數字

2021-08-21 13:54:27 字數 1056 閱讀 6560

題目描述

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

類似二分查詢,旋轉陣列由兩個有序陣列組成

class solution 

intmid = left + (right-left)/2;

if(rotatearray[mid] >= rotatearray[left])

left = mid;

else

if(rotatearray[mid] <= rotatearray[right])

right = mid;

}return rotatearray[min];

}};

注意:當兩個指標指向的數字及他們中間的數字三者相同時,無法判斷中間的數字是位於前面的子陣列還是後面的子陣列,也就無法移動兩個指標來縮小查詢的範圍。

改進:

class solution 

intmid = left + (right-left)/2;

if(rotatearray[left] ==rotatearray[right] && rotatearray[mid] == rotatearray[left])

return mininorder(rotatearray,left,right);

if(rotatearray[mid] >= rotatearray[left])

left = mid;

else

if(rotatearray[mid] <= rotatearray[right])

right = mid;

}return rotatearray[min];

}int mininorder(vector rotatearray, int

left, int

right)

return res;

}};

面試題11 旋轉陣列的最小數字

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

面試題11 旋轉陣列的最小數字

把乙個陣列最開始若干個元素搬到陣列的末尾 一般方法遍歷,o n 將這個陣列看作是兩個排序陣列 利用二分查詢的思想,比較中間的數字與兩頭 如果中間元素位於第乙個遞增陣列,大於 等於第乙個指標,範圍 右邊 如果中間元素位於後面遞增陣列,它應該小於 等於第二個指標 左邊 注意改變後指向中間元素 最後結果是...

面試題11 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1。示例 1 輸入 3,4,5,1,2 輸出 1 示例 2 輸入 2,2,2,0,1 輸出 ...