Medium, 用時20分鐘
出現了兩處錯誤:
1.處理duplicates的方法沒問題,僅需考慮尾部的duplicates即可,從而劃歸為153題(no duplicates)。
2.在去除尾部duplicates后需要再去除corner case(error1), 否則[1,2,1]無法test成功(去除duplicates后會出現順序情況)
3.error2,bs的條件不能讓pivot與nums[begin]相比,應該與nums[0]。
public class Solution {
public int findMin(int[] nums) {
//9:07
//Eliminate some corner cases!
int length = nums.length;
if(length == 1) return nums[0];
if(length == 2) return Math.min(nums[0], nums[1]);
if(nums[0] < nums[length - 1]) return nums[0];
int begin = 0, end = length-1;
//remove duplicates in the tail!
while (nums[end] == nums[0] && end > 0) {
end --;
}
if(end == 0) return nums[0];
//this is necessary(error1)
if(nums[0] < nums[end]) return nums[0];
while (begin < end) {
int mid = (begin + end) / 2;
int pivot = nums[mid];
//必須是nums[0],不能是nums[begin]!與不同的bs不同(error2)
if(pivot >= nums[0]) begin = mid + 1;
else end = mid;
}
return nums[begin];
}
}