Ну, потому что у нас не может быть массивов / последовательных блоков памяти больше, чем 10 ^ 6 или 10 ^ 7
Если у нас есть Размер многомерного массива уменьшится до Матрицы [1000] [1000], чтобы получить всего ~ 10 ^ 7 блоков
Itertools генерирует все возможные пары, которые могут быть экспоненциальными, и сохранение их в наборе будет определенно переполнено как во времени, так и в пространстве.
Таким образом, решение этой проблемы могло бы улучшить алгоритм как по времени, так и по сложности памяти.
один из способов решения этой проблемы - хеширование,
Основная идея
A + B = target, где A, B - элементы массива
поэтому мы поддерживаем хеш-таблицу с ключом = элементом и значением = индексом
и итерации, чтобы найти, присутствует ли B = target - A, в массиве, если найден, мы печатаем индекс (A, B)
class Solution:
def twoSum(self, nums, target):
hashtable = dict() # key = number , value = index
n = len(nums)
lst = []
for i in range(n):
if(hashtable.get(target-nums[i],None) is None):
# not found so update the hashtable
hashtable[nums[i]] = i
else:
# pair found
lst.append((hashtable[target-nums[i]],i))
return lst
cls = Solution()
nums = [3,3]
lst = cls.twoSum(nums,6)
print(lst)