#python-3.x #list
Вопрос:
Недавно я начал писать код на Python. Я буду признателен, если кто-нибудь сможет ответить на мой вопрос. Спасибо.
Учитывая массив целых чисел nums и целочисленную цель, возвращайте индексы двух чисел таким образом, чтобы они складывались в цель. Пример: Ввод: цифры = [2,7,11,15], цель = 9 Вывод: [0,1]
Это мой код:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)):
j=i 1
while j<len(nums):
if nums[i] nums[j] == target:
print(i,j)
else:
i=i 1
Результат, который я получаю:
Превышен предел мощности
0 1
0 1
0 1……..
Кто-нибудь может сказать мне, что не так с кодом? Я знаю, что мы можем использовать перечисление и делать. Но я хочу знать причину превышения «Выходного предела».
Спасибо
Ответ №1:
Ваш код работает медленно, потому что у вас есть вложенные циклы ( for
и while
). Таким образом, при больших вводах вы получаете ошибку тайм-аута.
Попробуйте преобразовать nums
в словарь, где ключами будут числа и индексы значений. Таким образом, вы можете проверить, есть ли у вас второе число за O(1) раз:
nums = [2, 7, 11, 15]
target = 9
nums = {v: i for i, v in enumerate(nums)}
for val, i in nums.items():
if target - val in nums:
print(i, nums[target - val])
break
С принтами:
0 1
Ответ №2:
В других ответах указываются другие проблемы с производительностью, которые могут привести к ошибке превышения лимита времени, и способы их устранения (и в процессе устраните свою реальную проблему с помощью побочного эффекта), но пропустите проблему, которая вызывает ошибку превышения наблюдаемого предела вывода. Решил, что я объясню реальную проблему, чтобы вы знали, что это значит, если увидите ее снова.
Ваша последняя реплика-это i=i 1
когда вы почти наверняка имели в виду j=j 1
. Поскольку вы никогда не меняетесь j
, while
цикл либо никогда не запускается (когда len(nums) == 1
), либо выполняется вечно ( len(nums) > 1
). Конечно, поскольку вы действительно меняетесь i
, в конечном итоге i
превышаете допустимые показатели nums
, и ваш код умирает вместе с an IndexError
. Обратная связь для этого IndexError
почти наверняка длиннее, чем определенный предел вывода для такой простой проблемы, что вызывает проблему, которую вы видите.