LeetCode OJ---Sqrt(x)

题目链接:

http://oj.leetcode.com/problems/sqrtx/


看题目就知道是水题一枚,做这个平台的题目还是没有习惯,毕竟这里的题目都是以面试为目的的,所以Coding的时候一定要谨慎.

这里使用二分查找,二分虽然思路很简单,但是代码还是有几个地方值得注意的,

比如 mid = left + (right - left) / 2; 你是不是会使用 mid = (left + right) / 2;但是你有没有考虑过做加法有可能会溢出?而且跳出 while()循环的条件一定要仔细考虑,避免因为粗心而产生死循环。


附上我的代码:

 1 class Solution {
 2 public:
 3     int sqrt(int x) {
 4         if (0 == x) return 0;
 5         int left = 1, right = x, ans;
 6         while (left <= right) {
 7             int mid = left + (right - left) / 2;
 8             if (mid <= x / mid) {
 9                 left = mid + 1;
10                 ans = mid;
11             } else {
12                 right = mid - 1;
13             }
14         }
15         return ans;
16     }
17 };


原文地址:https://www.cnblogs.com/Stomach-ache/p/3703159.html