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

Лецкод: Две суммы

Это является частью серии LetCode и других объявлений олешенного решения (индекс). Если вам понравилось … с меткой Python, Java, карьеры, алгоритмы.

Взломать кодирующее интервью (6 частей серии)

Это является частью серии LetCode и других объявлений олешенного решения (индекс). Если вам понравилось это решение или нашел его полезным, пожалуйста, как этот пост.

Проблема лецкода № 1 (легко): две суммы

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

Вы можете предположить, что каждый вход будет иметь ровно одно решение, и вы не можете использовать один и тот же элемент дважды.

Вы можете вернуть ответ в любом порядке.

Пример 1:

Вход: Nums = [2,7,11,15], Выход: [0,1] Выход: поскольку ZEMS [0] + NUM [1], мы возвращаем [0, 1].

Пример 2:

Вход: Nums = [3,2,4], Выход: [1,2]

Пример 3:

Вход: Nums = [3,3], Выход: [0,1]

Ограничения:

2Length -109 [I] -109 существует только один действительный ответ.

Предварительно реквизит

Давайте не будем тратить время на то, что два петель решения даже достойны рассмотрения! Во время выполнения: O (n ^ 2)

Кроме того, вы должны понимать, что решение требует, чтобы вы вернули индекс значений, необходимых для получения этой суммы, поэтому вы не можете отсортировать вход для перемещения влево или вправо.

Итак, вы можете думать о другом пути!

Решение

Там могут быть несколько решений, но один подход может дать вам сложность выполнения O (N). И это с использованием Hashmap’s!

Итак, как это работает? Скажите, что вы храните индексы всех чисел из массива в качестве карты, чтобы цифры стали ключом HASHMAP, а индексы становятся значением.

Как это поможет?

  • Просто петлю снова на массиве, найдите требуемое второе число и проверьте, существует ли он в Hashmap или нет! Если вы нашли его, найдите индекс и верните индекс первого номера и второго числа.

Это решение действительно элегантно и работает очень хорошо, единственный недостаток в том, что вам нужен O (n) Космическая сложность также.

Реализация

  • Для некоторых проблем Python действительно обеспечивает краткое решение
class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        dictionary = {}

        for index, value in enumerate(nums):
            dictionary[value] = index


        for i in range(len(nums)):
            second_number = target - nums[i]
            if second_number in dictionary.keys():
                second_index = nums.index(second_number)

                if i != second_index:
                    return sorted([i, second_index])

Результат

** ПРИМЕЧАНИЕ – Интервьюер может спросить вас, почему вы создали двое для петлей вместо 1 – и да, вы можете сделать это более кратко – но я думаю, вы лучше понимаете решение лучше с O (n) петля.

  • в Джава
int[] twoSum(int[] nums, int target) {

        final Map map = IntStream.range(0, nums.length)
                .boxed()
                .collect(Collectors.toMap(i -> nums[i],
                        i -> i,
                        (a, b) -> b));

        for (int i = 0; i < nums.length; i++) {
            int secondNumber = target - nums[i];

            if (map.containsKey(secondNumber)) {
                int secondNumberIndex = map.get(secondNumber);

                if (secondNumberIndex != i) {
                    return new int[]{i, secondNumberIndex};
                }
            }

        }

        return new int[]{};
    }

Взломать кодирующее интервью (6 частей серии)

Оригинал: “https://dev.to/saurabhpro/two-sum-96-faster-57pf”