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