请求分析findSum算法的时间复杂度(基于大O表示法)
findSum算法的大O复杂度分析
先看你给出的代码:
function findSum(arr,value){ const set = new Set(); for (let val of arr) { set.add(val); } const res = []; for (let val of set) { const target = value - val if (set.has(target)) { res.push(val, target); break; } } return res.length > 0 ? res : false; }
时间复杂度:O(n)
- 第一步循环遍历输入数组
arr,将每个元素添加到Set中。Set的add操作平均时间复杂度是O(1),所以这部分的时间开销是O(n)(n为arr的元素个数)。 - 第二步遍历Set,寻找满足
val + target = value的元素对。Set的has操作平均也是O(1),最坏情况下需要遍历整个Set(比如找不到符合条件的元素,或者符合条件的元素是Set的最后一个),而Set的最大元素个数等于arr的长度n,所以这部分最坏开销也是O(n)。 - 把两部分加起来,总时间复杂度是O(n) + O(n) = O(n)。
空间复杂度:O(n)
- 我们创建了一个Set来存储
arr中的元素,最坏情况下arr没有重复元素,Set需要存储所有n个元素,所以空间复杂度是O(n)。 - 额外的数组
res最多存储2个元素,这部分空间是常数级O(1),可以忽略不计。
内容的提问来源于stack exchange,提问作者johnjoker13
相关产品推荐
相关产品推荐

