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 };

 


 

 

你可能感兴趣的:(LeetCode)