zoukankan      html  css  js  c++  java
  • [LeetCode] Sqrt(x)

    Implement int sqrt(int x).

    Compute and return the square root of x.

    Hide Tags
     Math Binary Search
     
    思路:整体上用2分比逐个比较强。
     
    首先,给出一个错误的版本:错误之处在于红色部分,当mid较大时,mid*mid会超过INT_MAX溢出。
            int sqrt(int x) {
                int low = 0;
                int high = x;
                int mid = 0;;
    
                while(low <= high)
                {
                    mid = (high - low)/2 + low;
                    cout << "low	" << low << endl;
                    cout << "high	" << high<< endl;
                    cout << "mid	" << mid<< endl;
                    if(x == INT_MAX)
                        break;
                    if( (mid * mid) <= x && (mid+1) * (mid+1) > x)
                        return mid;
                    else if(mid * mid < x )
                    {
                       low = mid + 1; 
                    }
                    else
                    {
                       high = mid - 1; 
                    }
                }
    
                return mid;
            }

    然后给出一个AC版本,用mid<x/mid 来代替,同时由于有除法,要保证mid不等于0,当x==1时,mid就会为0,所以特殊处理,当x》=2时,mid》=1,就没问题了。

    class Solution {
        public:
            int sqrt(int x) {
                int low = 0;
                int high = x;
                int mid = 0;;
    
                if(x == 0) return 0;
                if(x < 0) return -1;
                if(x == 1) return 1;
    
                while(low <= high)
                {
                    mid = (high - low)/2 + low;
                    #if 0
                    cout << "low	" << low << endl;
                    cout << "high	" << high<< endl;
                    cout << "mid	" << mid<< endl;
                    #endif
                    if( mid  <= x/mid && (mid+1) > x/(mid+1))
                        return mid;
                    else if( mid < x/mid )
                    {
                       low = mid + 1;
                    }
                    else
                    {
                       high = mid - 1;
                    }
                }
    
                return -1;
            }  
    };
     
     
  • 相关阅读:
    oracle连接命令
    oracle Wrap加密
    oracle copy
    oracle loader
    oracle一些常见的问题
    python-cn(华蟒用户组,CPyUG 邮件列表)
    代理服务器验证工具
    多线程中的信号/槽
    【多线程】python界面阻塞,白屏,not responding解决的简单例子
    vi命令
  • 原文地址:https://www.cnblogs.com/diegodu/p/4325528.html
Copyright © 2011-2022 走看看