題目描述
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為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 輸出 ...