#python #python-3.x
#python #python-3.x
Вопрос:
Вопрос: Учитывая массив целых чисел, верните индексы двух чисел таким образом, чтобы они в сумме соответствовали определенной цели.
Вы можете предположить, что каждый ввод будет иметь ровно одно решение, и вы не можете использовать один и тот же элемент дважды.
Пример:
Заданные числа = [2, 7, 11, 15], цель = 9,
Потому что nums[0] nums[1] = 2 7 = 9, возвращает [0, 1].
class Solution:
def twoSum(self, nums, target):
lookup={}
for cnt, num in enumerate (nums):
if target-num in lookup:
return lookup[target-num], cnt
lookup[num]=cnt
Я не в состоянии понять шаги после использования цикла for.Я новичок в Python, кто-нибудь, пожалуйста, помогите мне.
Комментарии:
1.
enumerate(items)
возвращает(idx, item)
для каждого элемента вitems
иidx
начинается с0
, если не указано иное2.
if target-num in lookup:
что это значит?3.
if target-num in lookup
означает «если словарьlookup
содержитtarget-num
в качестве ключа»
Ответ №1:
Позвольте мне помочь вам понять, объяснив, что делает код и как он решает проблему.
Нам нужно найти два числа, сумма которых равна 9, для достижения этого мы можем выполнить итерацию по каждому числу в массиве, а затем посмотреть, встретили ли мы уже число, равное целевому числу минус число, на котором мы находимся в данный момент. Если мы еще не сталкивались с таким числом, мы сохраняем текущее число и соответствующий ему индекс.
Поскольку нам нужно возвращать индексы, мы хотим иметь возможность искать пары число-цель и немедленно получать индекс. Решение использует словарь для хранения числа (ключа) и возврата индекса как (значения).
Мы перебираем каждое число, если мы уже сталкивались с целевым числом ранее, мы можем вернуть текущий индекс и индекс целевого числа, если мы не сталкивались с этим числом, мы просто сохраняем текущее число и его индекс.
Часть перечисления просто предоставляет индекс вместе со значением массива, который выполняется итерацией, в форме (id, item).
class Solution:
def twoSum(self, nums, target):
# Here a dictionary is created, which will store value, index as key, value pairs.
lookup={}
# For every number in the array, get the index (cnt) and number (num)
for cnt, num in enumerate (nums):
# If we find target-num, we know that num target-num = target
if target-num in lookup:
# Hence we return the index of the target-num we stored in the dict, and the index of the current value (cnt)
return lookup[target-num], cnt
# Otherwise we store the current number as key with its index as value
lookup[num]=cnt
Ответ №2:
enumerate()
метод добавляет счетчик к итерируемому и возвращает его в виде объекта enumerate. Этот объект enumerate затем может быть использован непосредственно в циклах for или преобразован в список кортежей с помощью метода list().
Например,
>>>list(enumerate("abc"))
Выдает
[(0, 'a'), (1, 'b'), (2, 'c')]
Для удобства понимания я комментирую вашу программу. Пройдитесь по нему, вы наверняка поймете.
class Solution:
def twoSum(self, nums, target):
# lookup is a dictionary that stores the number and its index
# e.g. '{7:1}'
# number 7 at index 1
lookup={}
# As explained above cnt and num will receive values one by one along with index.
for cnt, num in enumerate (nums):
# We look if the number required to be added into the 'num' is present in dictionary
if target-num in lookup:
# if value found in lookup then we return the current index along with the index of number found in lookup.
return lookup[target-num], cnt
# After every loop insert the current value and its index into the lookup dictionary.
lookup[num]=cnt
Надеюсь, я ответил на ваш запрос так, как вы хотели. Пожалуйста, прокомментируйте ниже, если что-то осталось без ответа, я обязательно постараюсь ответить и на это.