leetcode之Sqrt(x)

原题如下:

Implement int sqrt(int x).

Compute and return the square root of x.

普通遍历方法肯定是超时的,这道题其实是一个有序数列中的查找问题,所以如果能想到这点儿,那么就能够想到采用最快的查找算法二分查找来进行求解,另外就是在编程时mid =(low+ high)/ 2是有可能越界的,所以可以采用其等价形式mid= low + (high- low)/2,另外就是求解过程中sq = mid *mid也是有可能越界的,所以需要将mid和sq都设成long long类型。还有就是因为参数和返回值都为int,在测试用例中2的平方根为1(即向下取整),所以最后需要返回high(而不是low)。

class Solution {
public:
    int sqrt(int x) {
		int	low = 0, high = x / 2 + 1;
		while(low <= high){
		    long long mid = low + (high - low) / 2;
			long long sq = mid * mid;
			if(sq == x)
				return mid;
			else if(x < sq)
				high = mid - 1;
			else
				low = mid + 1;
		}
		return high;
		
		
    }
};

另外还有一种算法是牛顿迭代法,这种方法是利用数学方程来简化求解问题,具体详见: http://www.cnblogs.com/AnnieKim/archive/2013/04/18/3028607.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值