题目:
Follow up for "Search in Rotated Sorted Array":
What if duplicates are allowed?
Would this affect the run-time complexity? How and why?
意思是假设数组中有重复元素,比如[1,3,1,1,1],这样的就很难用二分的中间点来区分target在哪里了。那就只能将start后移一位再看看,除非整个数组全部值相等,否则一定能找到可以二分的结果
实际上这个题目也就是比上一个题目多了一点改变,就是arr[start]==arr[mid],然后后移start重新考虑的条件。代码如下:
class Solution { public: bool search(vector<int>& arr, int target) { int start = 0, end = arr.size() - 1; while (start <= end) { int mid = start + (end - start) / 2; if (target == arr[mid]) return true; if (arr[start] < arr[mid]) { if (arr[start] <= target&&target < arr[mid]) end = mid; else start = mid + 1; } else if (arr[start] > arr[mid]) { if (arr[mid] < target&&target <= arr[end]) start = mid + 1; else end = mid; } else start++;//如果不能二分查找就将start后移一位,这时候arr[start]==arr[mid],所以start的值不可能是target,所以就放心游标往后移 } return false; } };