【发布时间】:2020-02-14 23:03:58
【问题描述】:
var twoSum = function(nums, target) {
for(let i = 0; i < nums.length; i++){
for(let j = i + 1; j < nums.length; j++){
if(nums[i] + nums[j] === target){
return [nums.indexOf(nums[i]), nums.lastIndexOf(nums[j])]
}
}
}
}
function([3,5,3,7,2], 9) //It should return [3, 4] since 7 + 2 = 9
这是一个 Javascript 函数,它使用嵌套的 for 循环遍历数字数组,并找到一对求和后等于目标并返回其索引的对。由于它有一个嵌套的 for 循环,我相信它具有 O(n^2) 或二次时间复杂度,我想知道是否有更快的方法来做到这一点。我只是想获得第一次通过的解决方案,然后对其进行改进。 ???提前致谢!
【问题讨论】:
-
不要使用数组,而是使用适当的查找数据结构。
-
@Bergi 棘手的是数组允许重复,大多数查找结构不允许。
-
它对您的复杂性问题没有帮助,但您不需要调用 indexOf,因为 i 和 j 已经是索引
-
对数组进行排序,然后可以使用二分查找
target - nums[i]。 -
@Barmar 但是在这种情况下,我们不在乎重复,对吗?
标签: javascript arrays nested-loops