首页 > 代码库 > leetcode 374
leetcode 374
这个题目很简单,但是要注意细节和对题目的理解,一开始我把guess函数的作用理解错了,第一版代码长这样:
1 int guessNumber(int n) 2 { 3 int low = 1; 4 int high = n; 5 6 while(low < high) 7 { 8 int mid = (high + low) / 2; 9 int g = guess(mid);10 if(g == 0)11 return mid;12 else if(g > 0)13 low = mid + 1;14 else15 high = mid - 1;16 }17 18 return low;19 20 }
在重新读了几次题目之后,第二版代码长这样:
1 int guessNumber(int n) 2 { 3 int low = 1; 4 int high = n; 5 6 while(low < high) 7 { 8 int mid = (high + low) / 2; 9 int g = guess(mid);10 if(g == 0)11 return mid;12 else if(g < 0)13 low = mid + 1;14 else15 high = mid - 1;16 }17 18 return low;19 20 }
但是还是不能正确通过,这很尴尬:查了半天发现是上面标注的那段代码有问题,我一直以为把代码写成最简单的数学表达式是一个好选择,但是这里显然不是这样:因为这样当high和low都比较大时,这是会导致溢出!所以有了第三个版本的代码:
int guessNumber(int n){ int low = 1; int high = n; while(low < high) { int mid = low + (high - low) / 2; int g = guess(mid); if(g == 0) return mid; else if(g < 0) low = mid + 1; else high = mid - 1; } return low;}
leetcode 374
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。