leetcode.69.sqrtx.X的平方根

題目描述

實現 int sqrt(int x) 函數。git

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

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

示例1:面試

輸入: 4
輸出: 2
複製代碼

示例2:算法

輸入: 8
輸出: 2
說明: 8 的平方根是 2.82842..., 
     因爲返回類型是整數,小數部分將被捨去。
複製代碼

暴力版本

// 暴力解法
func mySqrt(x int) int {
	for i := 0; i <= x; i++ {
		res := i * i
		if res == x {
			return i
		} else if res > x {
			return i - 1
		}
	}
	return -1
}
複製代碼

二分查找

//在有序數組中,找到最後一個小於等於給定值的數
func mySqrt2(x int) int {
	low, high := 0, x
	for low <= high {
		//防止大數相加溢出
		//位運算更高效
		mid := low + (high-low)>>1
		product := mid * mid
		if product > x {
			high = mid - 1
		} else {
			if (mid == x) || (mid+1)*(mid+1) > x {
				//遍歷最後一個數 || 下一個數大於目標值
				return mid
			}
			//下一個數小於等於目標值,因此mid不是最後一個數
			low = mid + 1
		}
	}
	return -1
}
複製代碼

二分查找思路

  • 至關於從0-x中找到最後一個平方<=x的整數
  • 咱們求解的是最後一個小於等於給定值的元素,因此當 product<=x時,須要確認 mid+1 的平方>x
  • 若是 mid+1 的平方 <= x ,說明mid確定不是最後一個,更新low

GitHub

參考資料

leetcode 69. x 的平方根數組

極客時間 數據結構與算法之美bash

本文爲原創文章,轉載註明出處,歡迎掃碼關注公衆號 tomorrowwu 或者網站lovecoding.club,第一時間看後續精彩文章,以爲好的話,順手分享到朋友圈吧,感謝支持。數據結構

image
相關文章
相關標籤/搜索