题目地址:
https://leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/description/
给定一个长 n n n的旋转数组 A A A,可能有重复元素。求其最小值。
思路参考https://blog.csdn.net/qq_46105170/article/details/104012699。但是这里由于可能有重复元素,我们需要将右边等于 A [ 0 ] A[0] A[0]的数略过。代码如下:
class Solution {
public:
int findMin(vector<int>& a) {
int l = 0, r = a.size() - 1;
while (r && a[r] == a[0]) r--;
if (!r) return a[0];
while (l < r) {
int mid = l + (r - l >> 1);
if (a[mid] < a[0]) r = mid;
else l = mid + 1;
}
return a[l] < a[0] ? a[l] : a[0];
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。