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 };
posted on 2014-03-19 12:24 Stomach_ache 阅读(149) 评论(0) 编辑 收藏 举报