на джаве, как реализовать это на питоне?
лови def two_sum(nums: list[int], k: int) -> list[int]: for idx, num in enumerate(nums): for next in range(idx + 1, len(nums)): if nums[idx] + nums[next] == k: return [nums[idx], nums[next]] return [] dataset = [ ([-1, 2, 5, 8], 7), ([-3, -1, 0, 2, 6], 6), ([2, 4, 5], 8), ([-2, -1, 1, 2], 0), ] for set, target in dataset: print(two_sum(set, target))
кому интересно решение этой задачи на питоне k = 10 val = [1,5,2,7,3,6,9,2,4] s = set() for i in val: if k - i in s: print(f"{k} = {i} + {k-i}") s.add(i)
А за что?
за линию. Обсуждается это решение https://youtu.be/JtMuXmmDl9s?t=218
меня как-то настораживает такая скорость надо бы уже разобраться с тем, как хеш-таблицы работают
Brandon Rhodes - The Dictionary Even Mightier - PyCon 2017
звучит сложно мне бы хоть на пальцах объяснение найти у меня всё никак не получается осознать, как можно искать значение среди миллиарда за то же время, что и среди десятка
Ты про хеш таблицу?
Дык хеш уникален же. Поэтому константа
ну допустим у меня есть набор натуральных чисел от 1 до 1_000_000_000 в случайном порядке, но числа 133_742_069 там нет как в принципе можно узнать, что его там нет за константное время?
Создаёшь 10_000_000 списков. В первый список кладёшь числа с остатком 0 при делении на 10_000_000. Во второй с остатком 1, и так далее. Если числа равномерно распределены, Тогда чтобы узнать, есть ли такое число, нужно будет пройтись по одному небольшому списку (предполагая, что числа распределены равномерно)
ну это всё равно не константа же?
Когда список становится больше — берёшь не 10 миллионов, а 100 миллионов.
Хороший вопрос. Мне это видится так: т.к. хэш уникален, то ты стучишься именно в эту ячейку сразу, поэтому и константа
по всякому покрутил и похоже что все так - сложность линейная https://dpaste.org/7qG4
за квадрат
с чего бы?
меня сначала смутило что там for I in val и потом if k-i in s
Обсуждают сегодня