题解 | #旋转数组的最小数字#
旋转数组的最小数字
https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
/* 二分查找,将 nums[m] 和 nums[r] 进行比较,如果前者大于后者,代表 [l, m] 升序,(m, r] 降序,因此在(m, r] 中查找,如果前者小于后者,说明(m, r] 升序,在 [l, m] 中查找,如果前者等于后者,则表示 [m, r] 中存在相等的值,最小值也在该范围 */ int minNumberInRotateArray(vector<int>& nums) { int l = 0, r = nums.size() - 1; while (l < r) { int m = l + (r - l) / 2; if (nums[m] > nums[r]) { l = m + 1; } else if (nums[m] == nums[r]) { r--; } else { r = m; } } return nums[l]; }