日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sqrt(int x) leetcode java

發布時間:2025/6/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sqrt(int x) leetcode java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Reference: http://blog.csdn.net/lbyxiafei/article/details/9375735

?題目

Implement int sqrt(int x).

Compute and return the square root of x.

?

題解

這道題很巧妙的運用了二分查找法的特性,有序,查找pos(在這道題中pos=value),找到返回pos,找不到返回鄰近值。

因為是求數x(x>=0) 的平方根, 因此,結果一定是小于等于x且大于等于0,所以用二分查找法肯定能搜到結果。

?

以每一次的mid的平方來與target既數x相比:

如果mid*mid == x,返回mid;

如果mid*mid < x,那么說明mid過小,應讓low = mid+1,在右邊繼續查找

如果mid*mid > x,那么說明mid過大,應讓high = mid-1,在左邊繼續查找


若x無法開整數根號(在上述查找中沒有找到),那么我們仍然可以利用之前對二分查找法總結的技巧,當target值不在數組中,low指向大于target的那個值,high指向小于target的那個值,由于我們需要向下取整的結果,所以我們返回high指向的值(這里high指向的值和high的值是同一個值),這個值就是所求得最接近起開根號結果的整數值。

?

因為leetcode的test case x=2147395599,在算mid*mid的時候造成溢出,所以mid不能使用int型來接,要使用long型防止溢出(Java中Integer型的范圍:-2147483648?到2147483648)

?代碼為:

?1?public?int?sqrt(int?x)?{
?2?????????int?low?=?0;
?3?????????int?high?=?x;
?4?????????while(low<=high){
?5?????????????long?mid?=?(long)(low?+?high)/2;
?6?????????????if(mid*mid?<?x)
?7?????????????????low?=?(int)mid?+?1;
?8?????????????else?if(mid*mid?>?x)
?9?????????????????high?=?(int)mid?-?1;
10?????????????else
11?????????????????return?(int)mid;
12?????????}
13?????????return high;
14?????}

總結

以上是生活随笔為你收集整理的Sqrt(int x) leetcode java的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。