LeetCode第69題---x的平方根

題目描述

實現 int sqrt(int x) 函數。

計算並返回 x 的平方根,其中 x 是非負整數。

由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。

示例 1:

輸入: 4
輸出: 2
示例 2:

輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842…,
由於返回類型是整數,小數部分將被捨去。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/sqrtx
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

代碼以及思路

class Solution {
    public int mySqrt(int x) {
     	/**
	 * 第一種做法:暴力法
	 * for i 從0到x,計算每一個i的平方,如果(第一個)i*i大於等於x,那麼這個i就是本題的解了
	 * 但是這樣會導致時間太長,提交程序發生錯誤
	 * 
	 * 第二種做法:折半查找
	 * 定義left、right、mid
	 * left=0、right=x
	 * 因爲結果是向下取整,例如2.333算成2、2.888也算成2
	 * 所以有兩種情況
	 * 第一種,x/mid==mid,這種取邊緣值
	 * 第二種,left與right指向兩個相鄰的數,取較小值left爲結果
	 * 
	 * 循環如下:
	 * mid=(left+right)/2
	 * 如果 right-left<=1 ,停止循環
	 * 如果 x/mid 大於 mid  ,那麼 left=mid
	 * 如果  x/mid 小於 mid, 那麼 right=mid
	 * 如果x/mid 等於mid,那麼返回 mid
	 * 
	 * 循環以後,返回left
	 * @param x
	 * @return
	 */
				int left=0;
		int right=x;
		int mid=0;
		if(x==1){
			return 1;
		}
		
		while(right-left > 1){
			
			mid=(int)(left+right)/2;
			
			if(x/mid < mid){
				right=mid;
			}else if(x/mid > mid) {
				left=mid;
			}else{
				return mid;
			}
				
		}
		
		return left;

    }
}

總結

二分查找法的應用應該在熟悉一下。

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