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

旋转数组的最小数字

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

全部评论

相关推荐

01-19 12:48
门头沟学院 C++
只想搞钱的鸽子很喜欢...:混账是很多的,还有那些在自己风华正茂的年纪说风凉话讥讽那些下岗前员工的。这些人都是现在职场环境这么烂的帮凶
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务