题目描述
这是问题 “在旋转排序阵列中查找最小值” 的进阶版:
如果允许重复,该怎么办?
这会影响时间复杂度吗?会如何影响和为什么?
假设一个按照升序排列的有序数组从某未知的位置旋转。
(比如 0 1 2 4 5 6 7
可能变成是 4 5 6 7 0 1 2
)。
找到其中最小的元素。
数组中可能存在重复的元素。
解题思路
public int findMin(int[] nums) {
int left = 0,
right = nums.length-1;
while (left < right) {
int mid = (left + right) / 2;
if (nums[mid] < nums[right]) {
right = mid;
} else if (nums[mid] > nums[right]){
left = mid + 1;
} else {
right--; //nums[mid]=nums[r] no idea, but we can eliminate nums[r];
}
}
return nums[left];
}