所以给定 2 个未排序的数组,我必须找出是否有任何一对值(每个数组中有 1 个)加起来等于目标。
在 javascript 中,我所做的是从 array1 中找到最大值和最小值,然后创建一个大小为 maxVal-minVal
的数组。
然后我遍历 array1 并在新数组的每个与 array1 的值相对应的索引处放置一个 1。
从那时起,我遍历 array2 并检查是否 newArray[ target - array2[i] ] == 1
这是解决这个问题的好方法吗?
最佳答案
是的,就速度而言,这是一个很好的解决方案。然而,就空间而言,这不是一个很好的解决方案,因为
make an array of size
maxVal-minVal
当 maxVal-minVal
很大时,比如数亿,您需要分配和零初始化一个非常大的数组。如果两组数比较少,比如几千项,初始化数组的时间可能会超过求解的时间。
更好的方法是使用基于散列的集合容器代替数组,因为您可以在不进行任何更改的情况下运行算法,而内存要求为 O(N) 而不是 O(maxVal-minVal)。
在 JavaScript 中,一个 object can be used as a hash-based container .
关于arrays - 2 个未排序的数组,查找是否有任何一对值加起来等于目标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42149209/