当前位置: 首页 > 知识库问答 >
问题:

从leetcode oj中二分搜索平方根

彭鸿文
2023-03-14
public static int sqrt(int x) {

     if( x == 0 || x == 1){
         return x;
     }
     long start = 0;
     long end = x;


     while ( end-start > 1){
         long mid = (int)(end + start) / 2;
         long s = mid * mid;

         if(s == x){
             return (int)mid;
         }
         else if(s > x){
             end = mid;
         }
         else {
             start = mid;
         }

     }

     return (int)start;
    }

上面是工作代码段。我有以下问题。事先谢谢你的帮助。;-)

  1. while(end-start>1)为什么这里需要1?就因为返回的意思是int?
  2. 如果我们将while循环从while(end-start>1)更改为while(end>start),我们必须使end=mid-1;和start=mid+1,对吗?还有一步,不知道这是不是也是因为返回类型是整数?
  3. 为什么不能返回End?或(int)(开始+结束)/2??我看到几乎99%的答案都回到了二分搜索的左界。我只想知道回到右边边界还是中间边界好?

共有1个答案

端木兴国
2023-03-14

返回类型int只是表示返回的结果类型为int。它与方法体内部的算法无关。下面我试着回答你的问题:

  1. while(end-start>1)用于确保end始终大于start。如果end-start为1或小于1,则表示您已到达二进制搜索的结尾。
  2. 您可以继续将while(end-start>1)更改为while(end>start),它仍然可以工作。不必使end=mid-1和start=mid+1
  3. 这完全取决于你在哪里回答谎言。对于每个问题,它可能是不同的。

您应该尝试下面的链接来更好地理解二分搜索算法。

http://community.topcoder.com/tc?module=static&d1=tutorials&d2=binarysearch

希望有帮助。

 类似资料:
  • 我有一个问题,我的二进制搜索算法寻找2的平方根似乎是在一个无限循环中,并永远运行: 我不确定我的while循环是否存在问题。我认为这将是一个非常直接的二进制搜索算法,只需稍加修改即可适应平方根方面。 当运行我的代码时,我似乎无法让它产生任何输出。我不确定代码或编译器是否存在真正的问题,因为我认为我遵循的算法与过去非常接近。

  • 主要内容:src/runoob/binary/BinarySearch.java 文件代码:一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件: 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。 它的左、右子树也都是二分搜索树。 如下图所示: 二、适用说明 二分搜索树有着高效的插入、删除、查询操作。 平均时间的时间复

  • 我正在用python开发一个二叉查找树。但是我的检索方法并不像我希望的那样工作。只有当我想检索根节点时,它才返回正确的值,对于所有其他节点,它都不返回任何值。 下面是我的节点类的代码: 我的二叉树代码: 所以Bintree中的最后一个方法为除Root之外的所有值返回Not,但它应该返回节点的值。 填充树:

  • 在上一节中,我们考虑构建一个二叉搜索树。正如我们所学到的,二叉搜索树的性能可以降级到 $$O(n)$$ 的操作,如 get 和 put ,如果树变得不平衡。在本节中,我们将讨论一种特殊类型的二叉搜索树,它自动确保树始终保持平衡。这棵树被称为 AVL树,以其发明人命名:G.M. Adelson-Velskii 和E.M.Landis。 AVL树实现 Map 抽象数据类型就像一个常规的二叉搜索树,唯一

  • 代码是一个简单的二分搜索程序。我试着追踪程序,但它只会让我更加困惑。我不明白为什么嵌套的if has data,min,midpoint-1,&target和底部的else if语句has data,midpoint+1,max,target。

  • 如果我有一个平衡的二叉树,并且我想在其中搜索一个项目,那么大的oh时间复杂度会是O(n)吗?在二叉树中搜索一个项目,不管它是否平衡,会改变O(n)的大时间复杂性吗?我知道如果我们有一个平衡的BST,那么搜索一个项目就等于BST的高度so O(log n),但是普通的二叉树呢?