题解 | #旋转数组的最小数字#
旋转数组的最小数字
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];
}


查看17道真题和解析