Рубрики
Без рубрики

Два сумма – LeetCode

Сегодня я собираюсь рассказать о трех решениях популярного LeetCode Вопрос о двух сумме. Вопрос я … с меткой Python, LeetCode, Hashtable, Twopointer.

Сегодня я собираюсь рассказать о трех решениях популярного LeetCode Вопрос о двух сумме.

Вопрос заключается в следующем: Учитывая массив чисел и целевой номер, верните индексы двух чисел, которые добавляют к целевому номеру.

Решения:

  1. O (n^2) Время, O (1) Пространство мы можем использовать два для петель, чтобы пройти через массив и найти показатели двух чисел, которые составляют целевой номер.
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        for i in range(len(nums)):
            for j in range(i+1, len(nums)):
                if nums[i] + nums[j] == target:
                    return [i, j]
  1. O (n) время, O (n) пространство Мы можем использовать хэш -таблицу для хранения чисел в качестве ключей и индексов в качестве значений. Затем мы проверяем, находится ли разница (цель – число) в хэш -таблице. Если это так, верните как индекс числа, так и индекс разницы.
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        values = {}
        for i, num in enumerate(nums):
            diff = target - num
            if diff in values:
                return [i, values[diff]]
            values[num] = i
        return []
  1. O (nlogn) время, O (1) пространство Вы можете использовать два метода указателя. После сортировки массива и создания массива чисел и их индексов создайте два указателя i и j, где и (массив) -1. Если сумма меньше цели, увеличение i, если больше, увеличение j. Если равны, верните индексы.
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        i = 0
        j = len(nums) - 1
        sortedNums = sorted(zip(nums, range(len(nums))))
        while i < j:
            if sortedNums[i][0] + sortedNums[j][0] == target:
                return [sortedNums[i][1], sortedNums[j][1]]
            elif sortedNums[i][0] + sortedNums[j][0] < target:
                i += 1
            elif sortedNums[i][0] + sortedNums[j][0] > target:
                j -= 1

Оригинал: “https://dev.to/xshirl/two-sum-leetcode-3afp”