MrXiong
V2EX  ›  Java

求教 leetcode 374, Java 解

  •  
  •   MrXiong · Dec 1, 2017 · 3783 views
    This topic created in 3267 days ago, the information mentioned may be changed or developed.
    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 replies  •  2017-12-01 10:52:16 +08:00
    chy373180
    chy373180
    Dec 1, 2017
    1
    int mid = (min + max) / 2 int 会 overflow
    MrXiong
    MrXiong
    OP
    Dec 1, 2017
    2
    @chy373180 但是提示的是超时不是 overflow
    zjbztianya
    zjbztianya
    Dec 1, 2017
    3
    @MrXiong 溢出了循环还在跑啊。只是是个死循环。所以就 T 了
    MrXiong
    MrXiong
    OP
    Dec 1, 2017
    4
    @zjbztianya 谢谢,明白了
    u1ucky
    u1ucky
    Dec 1, 2017 via Android
    5
    @MrXiong overflow 占用符号位,两个正数相加会返回负数,得不到期望值,于是就死循环。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   907 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:17 · PVG 05:17 · LAX 13:17 · JFK 16:17
    ♥ Do have faith in what you're doing.