Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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函数的时间复杂度是线性的还是二次的?_Javascript_Algorithm_Performance_Time Complexity - Fatal编程技术网

这个JavaScript函数的时间复杂度是线性的还是二次的?

这个JavaScript函数的时间复杂度是线性的还是二次的?,javascript,algorithm,performance,time-complexity,Javascript,Algorithm,Performance,Time Complexity,我试图在谷歌采访视频中了解这个解决方案: 虽然他们在视频中说它是线性的,但我不能100%确定整个解决方案是否(以及为什么)是线性的而不是二次的 因为find() 但是find() 以下是我的JavaScript解决方案版本: const findSum=(arr,val)=>{ 让searchValues=[val-arr[0]]; for(设i=1;i

我试图在谷歌采访视频中了解这个解决方案:

虽然他们在视频中说它是线性的,但我不能100%确定整个解决方案是否(以及为什么)是线性的而不是二次的

因为
find()

但是
find()

以下是我的JavaScript解决方案版本:

const findSum=(arr,val)=>{
让searchValues=[val-arr[0]];
for(设i=1;i

我的工作:

  • i=1
    时,
    searchValues.length=0
  • i=2
    时,
    searchValues.length=1
  • i=3
    时,
    searchValues.length=2
这不应该意味着O(N+(N-1))的线性运行时间吗?还是我遗漏了什么


谢谢你的帮助

是的,您的解决方案是二次的,因为正如您所提到的
。includes
遍历数组,for
也遍历数组。然而,在采访中,他们谈到了查找数组的
无序_集
,这意味着这可以实现为哈希集,它有O(1)个查找/插入时间,使得算法O(n)(和O(n²)最坏,最坏的情况)。JS等价物将是一个
集合

 const findSum = (arr, sum) =>
  arr.some((set => n => set.has(n) || !set.add(sum - n))(new Set));

如果将
集合
用于
搜索值
,这将是线性的。正如@jonaswillms所指出的,集合使函数线性,因为
查找
/
包含
操作将是O(1)。链接视频使用集合,但您的解决方案版本使用数组,因此您的版本将是二次的,而它可以(应该)是线性的。非常感谢您的帮助和新的解决方案,Jonas。是时候让我更深入地了解场景了!
 const findSum = (arr, sum) =>
  arr.some((set => n => set.has(n) || !set.add(sum - n))(new Set));