/** * Created by 短裤内穿的超人 on 2017/9/26. * title: leetcode 69 * 基本描述:69 实现sqrt(x)函数的功能 * * 解题思路: * 这些题基本都是考察二分搜索,也就是折半查找,这有几个坑要特别注意,一个是终结条件,left>right * 还有一个是更新条件,以及求中位数注意溢出 */ public class BinarySearch { public static int mySqrt(int x) { if(x == 0) return 0; int left = 1; int right = x; int mid,ans = 0; while(left <= right){ mid = left+(right-left)/2; //这里用这种表述主要是为了防止right+left超过整形范围溢出 if(mid == (x / mid)) return mid; //同样不用mid*mid也是为了防止溢出 else if(mid < (x / mid)){ ans = mid; //这边用ans来记录隐形的答案 left = mid+1; //二分搜索的更新条件不能用left=mid等为出现死循环 }else{ right = mid-1; } } return ans; } public static void main(String[] args){ int x = 2147395599; //-123 int ans = BinarySearch.mySqrt(x); System.out.println(ans); } }
leetcode 69 Sqrt
最新推荐文章于 2022-06-27 17:56:15 发布