|

楼主 |
发表于 2019-7-8 09:40:24
|
显示全部楼层
本帖最后由 风扫地 于 2019-7-8 09:43 编辑
基本思路:二分查找
注意事项:防止加法溢出。
- // Forward declaration of guess API.
- // @param num, your guess
- // @return -1 if my number is lower, 1 if my number is higher, otherwise return 0
- int guess(int num);
- class Solution {
- public:
- int guessNumber(int n)
- {
- int ret_val = 0;
- int left = 1;
- int right = n;
- int mid = 0;
-
- while(left <= right)
- {
- mid = left + (right-left)/2; /* 经典的两个正整数相加取平均数防溢出的写法 */
- ret_val = guess(mid);
- if(ret_val==0)
- {
- ret_val = mid;
- break;
- }
- else if(ret_val < 0 )
- {
- right = mid - 1;
- }
- else
- {
- left = mid + 1;
- }
- }
-
-
- return ret_val;
- }
- };
- /*
- 执行结果:
- 通过
- 显示详情
- 执行用时 :8 ms, 在所有 C++ 提交中击败了34.75% 的用户
- 内存消耗 :8.1 MB, 在所有 C++ 提交中击败了64.30%的用户
- */
复制代码 |
|