MrXiong
V2EX  ›  Java

求教 leetcode 374, Java 解

  •  
  •   MrXiong · Dec 1, 2017 · 3364 views
    This topic created in 3083 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
        1
    chy373180  
       Dec 1, 2017
    int mid = (min + max) / 2 int 会 overflow
    MrXiong
        2
    MrXiong  
    OP
       Dec 1, 2017
    @chy373180 但是提示的是超时不是 overflow
    zjbztianya
        3
    zjbztianya  
       Dec 1, 2017
    @MrXiong 溢出了循环还在跑啊。只是是个死循环。所以就 T 了
    MrXiong
        4
    MrXiong  
    OP
       Dec 1, 2017
    @zjbztianya 谢谢,明白了
    u1ucky
        5
    u1ucky  
       Dec 1, 2017 via Android
    @MrXiong overflow 占用符号位,两个正数相加会返回负数,得不到期望值,于是就死循环。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   6144 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 02:04 · PVG 10:04 · LAX 19:04 · JFK 22:04
    ♥ Do have faith in what you're doing.