平方根

第69题:x的平方根

若如初见. 提交于 2019-12-01 09:47:28
一. 问题描述 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 二. 解题思路 本题主要采用二分查找来查找x的平方根m。这道题是比较简单的,但是要注意在进行二分查找时,对其初始值要有所限定,其最大值不能大于int类型的最大值2147483647。 步骤一:设置二分查找法的起点visit_first和终点visit_second。 步骤二:利用二分查找法进行查找(原理就不说了),其中最大值的限制条件要注意。 三. 执行结果 执行用时 :2 ms, 在所有 java 提交中击败了93.59%的用户 内存消耗 :33.7 MB, 在所有 java 提交中击败了75.11%的用户 四. Java代码 class Solution { public int mySqrt(int x) { int visit_first=0; int visit_second=((x)/2)+1; if(x>=Integer.MAX_VALUE||visit_second>Math.sqrt(2147483647)) { visit

leetcode——69.x的平方根

╄→尐↘猪︶ㄣ 提交于 2019-11-30 12:06:30
超出时间限制。。 1 class Solution: 2 def mySqrt(self, x: int) -> int: 3 for i in range(0,x//2+2): 4 if x>=i**2 and x<(i+1)**2: 5 return i 好气哦。。。加油想想怎么改进。。。 修改以后通过,但是还是太好,修改了将近40分钟,好没有效率啊: 1 class Solution: 2 def mySqrt(self, x: int) -> int: 3 i=x 4 m=[x] 5 while i>=0: 6 if i**2>x: 7 m[0]=i 8 i=i//2 9 elif x>=i**2 and x<(i+1)**2: 10 return i 11 else: 12 i=(i+m[0])//2 执行用时 :144 ms, 在所有 Python3 提交中击败了5.80%的用户 内存消耗 :13.9 MB, 在所有 Python3 提交中击败了5.22%的用户 别人的做法好简单,我就是太愚钝。。。。。。 ——2019.9.25 来源: https://www.cnblogs.com/taoyuxin/p/11583795.html

LeetCode 69 x 的平方根

99封情书 提交于 2019-11-30 10:34:46
链接:https://leetcode-cn.com/problems/sqrtx 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。 这道题是一道经典的用二分来解的题,二分有两个模版,当所求的性质在右边的时候,用模版1,当所求性质在左边的时候,用模版2. 二分的流程是首先定义解所在区间的边界,在这道题中,l = 0, r = x. 然后编写二分的框架,其实是求mid的运算。然后设计一个检查性质是否满足的条件,这个条件一定要满足答案在性质的边界点上。我们用 result 2 <= x , 当result在[0, 向下取整(sqrt(x))]的范围时,性质满足,当result在[向下取整(sqrt(x))+1, x]的范围时,性质不满足,因此check函数是符合条件的。然后判断一下区间如何更新,在这道题中所求的性质在左边,因此我们用模版2,所以更新方式为l = mid, r = mid - 1。并且当使用模版2时,在算mid的时候要加上1。 1 class Solution { 2 public: 3 int mySqrt

二分查找法:x 的平方根

二次信任 提交于 2019-11-28 05:41:43
实现 int sqrt(int x) 函数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 public int mySqrt(int x) { long left=0; long rigth=Integer.MAX_VALUE; while(left<rigth){ // 这种取中位数的方法又快又好,是我刚学会的,原因在下面这篇文章的评论区 // https://www.liwei.party/2019/06/17/leetcode-solution-new/search-insert-position/ // 注意:这里得用无符号右移动 long mid=(left+rigth+1)>>>1; long s=mid*mid; if(s>x){ rigth=mid-1; }else{ left=mid; } } return (int)left; } 来源: https://www.cnblogs.com/hanxiaomin/p/11394811.html

c++实现二分查找法和求平方根

荒凉一梦 提交于 2019-11-27 13:08:33
二分法查找,指的是在 有序 的数组中查找指定的元素。 (1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则返回结束,否则开始向两边查找。 (2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。 二分法查找的时间复杂度O(logn)。 注:使用二分法之前必须先将数据进行排序。 1.循环二分法实现: int binarySearch(vector<int> &vi, int key) { int left = 0; int right = vi.size() - 1; int num = 0; while(left <= right) { num ++; int var = (left + right)/2; if(key == vi[var]) { cout << "查找次数:" << num << endl; return var; } else if(key < vi[var]) right = var - 1; else if(key > vi[var]) left = var + 1; } return -1; } 2.递归调用二分法: int RecursiveSearch(vector<int> &vi, int key, int left, int right) { if(left > right)

算法 求一个数的平方根

家住魔仙堡 提交于 2019-11-26 14:19:40
python: #coding=utf-8 from decimal import Decimal from decimal import getcontext #设置为显示8位有效数字 getcontext().prec=8 #求6的平方根 x=6 x=Decimal(str(x)) a=x/Decimal("2") diff=0 while(1): b = (a + x / a) / Decimal("2") diff=a-b a=b if(diff < Decimal("0.001")): break print(a) 输出 2.4494898 c: #include<stdio.h> int main(){ //求6的平方根 int x=6; float a=x/2.0; float diff=0.0; float b=0.0; while(1){ b=(a+x/a)/2.0; diff=a-b; a=b; if(diff<0.001){ break; } } printf("平方根为%f\n",a); return 0; } 输出 平方根为2.449490 参考: https://www.jianshu.com/p/b31f078994f0 https://blog.csdn.net/qq_16676375/article/details/82909145 https:/