LeetCode- Search in Rotated Sorted ArrayII旋转有序数组查找目标数

题目:

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;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_18548149/article/details/79550797