Здесь я пишу объяснения своих решений для рекомендованного пула задач на сайте LeetCode.com.
Two Sum
Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
You can return the answer in any order.
Example 1:
Input: nums = [2,7,11,15], target = 9
Output: [0,1]
Explanation: Because nums[0] + nums[1] == 9, we return [0, 1].
Example 2:
Input: nums = [3,2,4], target = 6
Output: [1,2]
Example 3:
Input: nums = [3,3], target = 6
Output: [0,1]
Решение:
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for i in range(len(nums)-1):
for j in range(i+1, len(nums)):
# if i==j:
# continue
if nums[i]+nums[j]==target:
return [i, j]
return [0, 0]
Пояснения:
В задаче Two Sum перебираются пары значений с индексом i и j
во вложенном цикле, чтобы сравнить все возможные пары значений.
По сути, i и j пробегают один и тот же диапазон, равный длинне массива.
Чтобы пары не повторялись, достаточно только условия продолжать перебор
если i==j, не проверяя значение, потому что нельзя сравнивать элемент сам с собой.
Однако, вместо этого условия можно внутренний цикл по j начинать не с i,
а с i+1, чтобы уменьшить пересечения индексов, и внешний цикл так же можно
заканчивать не на последнем элементе, а на предпоследнем len(nums)-1,
и тогда пересечения индексов вообще не будет, и условие проверки i==j можно
вообще убрать.