154. Find Minimum in Rotated Sorted Array II

来源:互联网 发布:java和php哪个更累 编辑:程序博客网 时间:2024/06/01 07:46

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.

题意:接上一题,假设一个元素存在重复的有序数组被旋转,那么怎么找最小值。

思路:跟不重复的时候思路一样,left,right不等的时候,继续用mid值跟right值比较;当相等时,观察mid值与right值的情况,若不等则按以前的方法处理,若相等,则left++,right--,继续进入循环。

class Solution {public:int findMin(vector<int>& nums) {int left = 0;int right = nums.size() - 1;while (left < right){if (nums[left] < nums[right])break;else if (nums[left] > nums[right]){int mid = (left + right) / 2;if (nums[mid] <= nums[right]){left++;right = mid;}else{left = mid+1;}}else{int mid = (left + right) / 2;if (nums[mid] > nums[right]){left = mid + 1;}else if (nums[mid] < nums[right]){left++;right = mid;}else{left++;right--;}}}return nums[left];}};




0 0