【題目描述】
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
Find the minimum element.
Notice
The array may contain duplicates.
假設一個旋轉排序的數組其起始位置是未知的(比如0 1 2 4 5 6 7可能變成是4 5 6 7 0 1 2)。
你需要找到其中最小的元素。
【注】:數組中可能存在重復的元素。
【題目鏈接】
www.lintcode.com/en/problem/find-minimum-in-rotated-sorted-array-ii/
【題目解析】
此題可使用二分法。
與Find Minimum in Rotated Sorted Array對照看,
一共有兩處修改。
1、在無重復元素時,首尾元素相等代表指向同一個位置,因此程序直接返回即可。
然而當存在重復元素時,該條件并不能表示指向同一個位置,因此
nums[low] > nums[high] ? ??改為 ? ? ?nums[low] >= nums[high]
2、在無重復元素時,中間元素與首元素相等,表示一共只有兩個元素,low與high各指向一個。
由于while循環中限制的大小關系,因此返回nums[high]即為最小值。
然而當存在重復元素時,該條件并不能表示一共只有low和high指向的兩個元素,
而是說明low指向的元素重復了,因此刪除其一,low ++即可。
【參考答案】
www.jiuzhang.com/solutions/find-minimum-in-rotated-sorted-array-ii/