
1 二分+缩小右区间去重
- 情况1——
nums[mid]在最小值右边或就是最小值

- 情况2——
nums[mid]在最小值左边

对于重复数组,又多了情况三
- 情况3——
nums[mid]和nums[right]相等重复

class Solution {
public:
int findMin(vector<int>& nums) {
int size = nums.size();
int left = 0, right = size - 1;
while (left < right) {
int mid = left + ((right - left) >> 1);
if (nums[mid] > nums[right])
left = mid + 1;
else if (nums[mid] < nums[right])
right = mid;
else if (nums[mid] == nums[right]) // 对于重复元素,缩小右区间; 暴力+二分思想
right--;
}
return nums[left];
}
};

该篇博客详细介绍了如何使用二分查找算法在有序数组中寻找最小值,特别是在存在重复元素的情况下,通过缩小右边界来优化搜索过程。具体包括三种情况:1) 中间元素大于右侧元素,2) 小于右侧元素,3) 与右侧元素相等并重复。通过这个方法,可以更有效地找到数组中的最小值。
1113

被折叠的 条评论
为什么被折叠?



