Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个解决方案的时间复杂度是O(N)还是O(LogN)?_Javascript_Algorithm_Asymptotic Complexity - Fatal编程技术网

Javascript 这个解决方案的时间复杂度是O(N)还是O(LogN)?

Javascript 这个解决方案的时间复杂度是O(N)还是O(LogN)?,javascript,algorithm,asymptotic-complexity,Javascript,Algorithm,Asymptotic Complexity,考虑到这一点: if (largestHole > (bin.length - i) && subHole < (bin.length - i)) { break; } 仍然是O(n)。复杂性没有考虑系数。此外,O(logn)函数类似于二进制搜索 编辑:O(对数n)算法的简单解释: 以二进制搜索为例。比如说,有一个从1到100的数字x,它隐藏在一个包含n个从1到100的数字的排序数组中。从数组的中间开始,根据中间数字相对于x的大小,搜索数组的左半部分或右半部分。

考虑到这一点:

if (largestHole > (bin.length - i) && subHole < (bin.length - i)) {
  break;
}
仍然是O(n)。复杂性没有考虑系数。此外,O(logn)函数类似于二进制搜索

编辑:O(对数n)算法的简单解释: 以二进制搜索为例。比如说,有一个从1到100的数字x,它隐藏在一个包含n个从1到100的数字的排序数组中。从数组的中间开始,根据中间数字相对于x的大小,搜索数组的左半部分或右半部分。该过程将递归进行,直到找到数字

例如,我想在[1,3,5,6,7,9,10]中找到5。 我从第四名开始。它是6,比5大,所以我们搜索左半部分,从1到5。然后,我再次检查缩小范围内的中间位置,即3。它小于5,所以我们搜索右半部分。此时,我们只剩下一个数字,即5

搜索会将数组一分为二,因此最坏的情况是使用log2n(以2为底的对数n)。这是一个O(logn)函数

然而,正如我所说,复杂性系数并不重要。例如,冒泡排序通常需要大约(n^2)/2圈,但我们只是将其计算为O(n^2),忽略1/2系数。

仍然是O(n)。复杂性没有考虑系数。此外,O(logn)函数类似于二进制搜索

编辑:O(对数n)算法的简单解释: 以二进制搜索为例。比如说,有一个从1到100的数字x,它隐藏在一个包含n个从1到100的数字的排序数组中。从数组的中间开始,根据中间数字相对于x的大小,搜索数组的左半部分或右半部分。该过程将递归进行,直到找到数字

例如,我想在[1,3,5,6,7,9,10]中找到5。 我从第四名开始。它是6,比5大,所以我们搜索左半部分,从1到5。然后,我再次检查缩小范围内的中间位置,即3。它小于5,所以我们搜索右半部分。此时,我们只剩下一个数字,即5

搜索会将数组一分为二,因此最坏的情况是使用log2n(以2为底的对数n)。这是一个O(logn)函数


然而,正如我所说,复杂性系数并不重要。例如,冒泡排序通常需要大约(n^2)/2圈,但我们只是将其计算为O(n^2),忽略1/2系数。

我同意O(n),但实际上它取决于parseInt函数的实现。

我同意O(n),但实际上它取决于parseInt函数的实现。

parseInt(a,b)是什么do?函数遍历所有的数字,所以它是O(n)(其中n是输入值中的二进制位数)。若要成为O(logn),它必须有很大的不同。@YogeshPatil它意味着使用基b解析a。@YogeshPatil No.O(n/2)仍然是O(n)。parseInt(a,b)做什么?函数遍历所有数字,所以它是O(n)(其中n是输入值中的二进制位数)。要成为O(logn),它必须有显著的不同。@YogeshPatil它意味着使用base b解析a。@YogeshPatil No.O(n/2)仍然是O(n)。请你能更好地解释一下你的意思吗?请你能更好地解释一下你的意思吗?
让bin=parseInt(n,10)。toString(2)
parseInt将数字从基数10转换为基数2@SeyiAdekoya该语句单独生成函数O(n),因为
.toString(2)
部分将迭代生成二进制数字字符串,一次生成一个parseInt将数字从基数10转换为基数2@SeyiAdekoya只有该语句才能生成函数O(n),因为
.toString(2)
部分将迭代生成二进制数字字符串,一次生成一个。
function solution(N) {
  let bin = parseInt(N, 10).toString(2);
  let subHole = 0;
  let largestHole = 0;
  for (var i = 0; i < bin.length; i++) {
    if (largestHole > (bin.length - i) && subHole < (bin.length - i)) {
      break;
    }
    if (bin[i] === '0') { subHole++; }
    else {
      if (subHole > largestHole) {
        largestHole = subHole;
      }
      subHole = 0;
    }
  }
  return largestHole;
}