【发布时间】:2018-11-21 12:52:04
【问题描述】:
设一个数组:[6,9,2,4,1]
我需要查找输入数字是否有一对。
前任。输入 - 7
输出 - 是 (6+1 )
输入 - 16
输出 - 否(没有对加法是 16)
我知道运行 2 个循环的明显方法,但它具有时间复杂度 n^2 。有人可以帮我提供一些优化的解决方案吗?
编程语言:Java
我尝试了什么:
1) 排序数组
2)根据输入数将其分为2个子数组(输入/ 2)。
3) 第一个数组的内循环和第二个数组的外循环
这减少了迭代。
【问题讨论】:
-
你可以用 1 个循环来完成,例如: foreach(var i in array) { if (array.contains( input-i)) { //combination found break; } }
-
您可以排序和使用 2 个指针。时间复杂度为 O(n log(n)),空间为 O(1)。您还可以使用时间复杂度为 O(n) 且空间为 O(n) 的 HashMap。您可以用时间换取空间,反之亦然。
-
@Luc 这仍然是 O(n^2)
-
@Luc:
array.Contains需要查找包括循环在内的数据... -
1.初始化一个空的哈希集。 2. 运行循环并检查 if(hashset.contains(num - arr[i]){ return "Yes"} hashset.add(arr[i]) 3. End of loop return "No"