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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章