首页 > 代码库 > Leetcode: Find Minimum in Rotated Sorted Array II

Leetcode: Find Minimum in Rotated Sorted Array II

Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

The array may contain duplicates.


class Solution {
public:
int find(vector<int> num, int begin, int end)
{
	int res = num[begin];
	for(int i = begin+1; i <= end; i++)
		if(res > num[i]) res = num[i];
	return res;
}

int binarySearch(vector<int> num, int begin, int end)
{
	if(begin == end) return num[begin];
	if(num[begin] < num[end]) 
		return num[begin];
	else if(num[begin] == num[end]) 
		return find(num, begin, end);
	else{
		int mid = begin + (end - begin)/2;
		if(num[begin] < num[mid]) 
			return binarySearch(num, mid+1, end);
		else if(num[begin] > num[mid])
			return binarySearch(num, begin, mid);
		else
			return find(num, mid, end);
	}
}

int findMin(vector<int> &num) {
	return binarySearch(num, 0, num.size()-1);
}
};


int find(vector<int> num, int begin, int end)
{
	int res = num[begin];
	for(int i = begin+1; i <= end; i++)
		if(res > num[i]) res = num[i];
	return res;
}

int findMin(vector<int> &num) {
		int begin = 0, end = num.size()-1;
		if(num[begin] < num[end]) return num[begin];
		while(begin <= end)
		{
			if(begin == end) return num[begin];
			if(num[begin] < num[end])return num[begin];
			else if(num[begin] == num[end])
				return find(num, begin, end);
			else{
				int mid = begin + (end - begin)/2;
				if(num[begin] < num[mid])
					begin = mid + 1;
				else if(num[begin] > num[mid])
					end = mid;
				else 
					return find(num, mid, end);
			}
		}
    }






Leetcode: Find Minimum in Rotated Sorted Array II