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;
            }  
    };
     
     
  • 相关阅读:
    从大量的IP访问记录中找到访问次数最多的IP
    打赏功能的实现
    MFC通过ODBC连接Mysql程序
    VC++中使用MFC通过ADO连接数据库
    MySQL 5.1参考手册
    MFC ADO mysql 经验总结一
    VC连接MySQL
    VC连接MySQL
    MFC使用ADO对象开发数据库应用程序
    MFC中用Ado连接数据库
  • 原文地址:https://www.cnblogs.com/diegodu/p/4325528.html
Copyright © 2011-2022 走看看