В недавнем интервью мне задали следующий вопрос: найти индексы двух чисел из отсортированного массива, которые складываются в целевую сумму без использования одного и того же числа дважды, если только оно не появляется дважды в массиве (его можно найти на Leetcode также). Вот пара решений, для которых мне нужна разбивка анализа сложности времени. Также, пожалуйста, сообщите мне, если есть какой-то другой способ решить эту проблему быстрее.
Решение 1 -
def findTwoSum(nums,target):
low = 0
high = len(nums) - 1
while low < high:
currSum = nums[low] + nums[high]
if currSum == target:
return low, high
elif currSum > target:
high -= 1
else:
low += 1
return -1,-1
Решение 2 -
def findTwoSum(nums,target):
hashmap = dict()
for i in range(len(nums)):
if nums[i] not in hashmap:
hashmap[nums[i]] = [i]
else:
hashmap[nums[i]].append(i)
for key in hashmap:
if target - key in hashmap:
if target - key != key:
return [hashmap[key][0], hashmap[target-key][0]]
elif len(hashmap[key]) > 1:
return [hashmap[key][0], hashmap[key][1]]
Теперь рассмотрим входной массив для той же проблемы, которая настолько велика, что требует хранения данных в распределенной системе. Как будет выглядеть решение, приспособленное для выполнения всей передачи сообщений или всего, что требуется для его работы в распределенной среде. Благодарим вас за то, что вы можете предложить решение с любыми допущениями, которые вы делаете. Спасибо!