题解 | #旋转数组的最小数字#

旋转数组的最小数字

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];
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务