V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MrXiong
V2EX  ›  Java

求教 leetcode 374, Java 解

  •  
  •   MrXiong · 2017-12-01 10:15:29 +08:00 · 2777 次点击
    这是一个创建于 2547 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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;
        }
    

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

    5 条回复    2017-12-01 10:52:16 +08:00
    chy373180
        1
    chy373180  
       2017-12-01 10:27:55 +08:00
    int mid = (min + max) / 2 int 会 overflow
    MrXiong
        2
    MrXiong  
    OP
       2017-12-01 10:31:06 +08:00
    @chy373180 但是提示的是超时不是 overflow
    zjbztianya
        3
    zjbztianya  
       2017-12-01 10:41:08 +08:00
    @MrXiong 溢出了循环还在跑啊。只是是个死循环。所以就 T 了
    MrXiong
        4
    MrXiong  
    OP
       2017-12-01 10:45:16 +08:00
    @zjbztianya 谢谢,明白了
    u1ucky
        5
    u1ucky  
       2017-12-01 10:52:16 +08:00 via Android
    @MrXiong overflow 占用符号位,两个正数相加会返回负数,得不到期望值,于是就死循环。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3395 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 00:17 · PVG 08:17 · LAX 16:17 · JFK 19:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.