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

旋转数组的最小数字

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

全部评论

相关推荐

03-10 11:23
门头沟学院 Java
鹿LF:计算机面试就跟数学题一样,没什么实际价值,但只能这么筛选,本质是考察你的努力,智力和学习能力
点赞 评论 收藏
分享
在笔试的大西瓜很矫健:校招数分不用想了,这经历和学历都不够用,大厂更别想,初筛都过不了,说点不好听的小厂数分都进不去(小厂也是假数分),要两个对口实习+3个项目(或者3+2),而且要有含金量才能补一点你的学历劣势。 建议刷实习,社招找数分,校招看运气,能入行业就行,可以运营转数分
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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