Find Minimum in Rotated Sorted Array II (LeetCode)

Suppose an array sorted in ascending order 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.

Example 1:

Input: [1,3,5]
Output: 1

Example 2:

Input: [2,2,2,0,1]
Output: 0
 
 

这一题和Find Minimum in Rotated Sorted Array的区别就是输入数组的元素是有重复的。

承接上一题,在考虑num[left]和num[right]的关系时,多了一个等于关系。

1.num[left]>num[right],最小值在左半部分

2.num[left]<num[right],最小值在右半部分

3.num[left]==num[right],跳过这个值,将问题转换为上面两种关系。

class Solution {
public:
	int findMin(vector<int>& nums) {
		if(nums.size()==0)
			return 0;
		int n=nums.size();
		int left=0;
		int right=n-1;
		int min_ele=INT_MIN;
		while(left<right-1){
			if(nums[left]<nums[right])
				return nums[left];

			int mid=left+(right-left)/2;
			if(nums[left]<nums[mid])
				left=mid;
			else if(nums[left]>nums[mid])
				right=mid;
			else 
				left++;
		}
		return min(nums[left],nums[right]);
	}
};

猜你喜欢

转载自blog.csdn.net/u014485485/article/details/80305462