lazy solutions..... Just skip the duplicates. Then worse case of time is O(n).
1 class Solution { 2 public: 3 int findMin(vector &num) { 4 int start = 0, end = num.size()-1, mid = 0; 5 if (num[start] < num[end]) return num[start]; 6 while (start < end) { 7 while (start < end && num[start] == num[start+1]) start++; 8 while (start < end && num[end] == num[end-1]) end--; 9 mid = (start + end)/2;10 if (num[mid] > num[end]) {11 start = mid + 1;12 } else {13 end = mid;14 }15 }16 return num[start];17 }18 };