这个题目很简单,但是要注意细节和对题目的理解,一开始我把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 else 15 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 else 15 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; }
时间: 2024-10-12 16:47:27