【发布时间】:2018-06-17 16:58:33
【问题描述】:
我参加了一家开发公司的技术面试。他们问了我以下问题:
给出一个数字数组 (n) 找到 2 个总和给出 (k) 的数字并打印出来。
例如
Input: n = [2,6,4,5,7,1], k = 8
Output: result=(2,6),(7,1)
我的解决方案:
function findSum(n,k){
let aux = []
for (let i = 0; i < n.length; i++) {
for (let j = i+1; j < n.length; j++) {
if (n[i] + n[j] == k) {
aux.push({ first: n[i], second: n[j] })
}
}
}
return aux;
}
他们告诉我,可以使用某种键或映射来进行练习。
有人知道如何只用一个循环来做到这一点吗?
【问题讨论】:
-
您正在检查所有对 O(n^2),您可以使用哈希表,插入所有元素将是 O(n),再次遍历将是 O(n),并进行恒定比较。 O(n + n) = O(n)
-
插入一个元素成本O(log n),因此插入所有元素成本O(n * log n),整体复杂度为O(n * log n)
-
@VasilyLiaskovsky 你从哪里得到 O(log n)?将具有良好哈希函数的元素插入到表中不会花费 O(log n)。
标签: javascript arrays algorithm sorting