求教 leetcode 374, Java 解

2017-12-01 10:15:29 +08:00
 MrXiong
public int guessNumber(int n) {

        int min = 1, max = n;

        while (min <= max) {
//            int mid = (min + max) / 2; 会超时
            int mid = min+(max-min ) / 2;//不超时
            int guess = guess(mid);
            if (guess == 1) {
                min = mid + 1;

            } else if (guess == -1) {
                max = mid - 1;
            } else {
                return mid;
            }
        }

        return min;
    }

请问为什么一个超时一个不超时

2647 次点击
所在节点    Java
5 条回复
chy373180
2017-12-01 10:27:55 +08:00
int mid = (min + max) / 2 int 会 overflow
MrXiong
2017-12-01 10:31:06 +08:00
@chy373180 但是提示的是超时不是 overflow
zjbztianya
2017-12-01 10:41:08 +08:00
@MrXiong 溢出了循环还在跑啊。只是是个死循环。所以就 T 了
MrXiong
2017-12-01 10:45:16 +08:00
@zjbztianya 谢谢,明白了
u1ucky
2017-12-01 10:52:16 +08:00
@MrXiong overflow 占用符号位,两个正数相加会返回负数,得不到期望值,于是就死循环。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/411015

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX