题目:
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;
}
};