Вам даны массив и число N. Нужно вернуть True, если в массиве есть такие два числа A и B, что их сумма A + B даёт N. В противном случае нужно вернуть False.
Примеры:
[1, 2, 3, 4], 5 ⇒ True
[3, 4, 6], 6 ⇒ False
✔️Можно, конечно, применить брутфорс, но есть решение получше. Его сложность составит O(n). Вот как оно выглядит:
def two_sum(numbers, target):
index = {num: i for (i, num) in enumerate(numbers)}
n = len(numbers)
for i in range(n):
a = numbers[i]
b = target - a
if b in index:
j = index[b]
if i != j:
return True
return False
Здесь сначала создаётся словарь index, который хранит числа из массива в качестве ключей и их индексы в массиве в качестве значений. Затем идёт перебор элементов массива. Для каждого элемента a вычисляется число b, которое необходимо для достижения суммы target. Далее проверяется, содержится ли b в словаре index. Если да, то дополнительно проверяется, не совпадает ли индекс текущего элемента a с индексом элемента b. Если индексы различны, это означает, что была найдена пара чисел, сумма которых равна target.
#алгоритмы
#python
Please open Telegram to view this post
VIEW IN TELEGRAM
Условие: У вас есть датафрейм df, содержащий два столбца: A и B. Столбец A содержит даты, а столбец B — числовые значения. Как бы вы рассчитали скользящее среднее по столбцу B с окном в 3 дня, предполагая, что значения в столбце A идут подряд и без пропусков?
Решение:
import pandas as pd
data = {
'A': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05',
'2023-01-06', '2023-01-07', '2023-01-08', '2023-01-09'],
'B': [18, 71, 13, 57, 7, 8, 69, 83, 27]
}
df = pd.DataFrame(data)
# Убедимся, что столбец A распознан как дата
df['A'] = pd.to_datetime(df['A'])
# Установим столбец дат как индекс датафрейма
df = df.set_index('A')
# Рассчитаем скользящее среднее по столбцу B с окном в 3 дня
df['Moving_Average'] = df['B'].rolling(window=3).mean()
print(df)
#python
#pandas
#программирование
Please open Telegram to view this post
VIEW IN TELEGRAM
Объясните разницу между списком и кортежем?
▫️Список — это упорядоченная коллекция элементов. Элементы могут иметь любой тип. При этом коллекцию можно изменять: вставить новый элемент, удалить старый и т.д. То есть длина у списка динамическая — при необходимости Python будет выделять новую память.
Список создаётся через квадратные скобки.
▫️Кортеж — это тоже упорядоченная коллекция элементов. Элементы тоже могут иметь любой тип. Однако изменять кортеж нельзя. Кроме того, в памяти Python пустой кортеж — всегда в единственном экземпляре. Пустые списки же каждый раз создаются заново.
Кортеж создаётся через круглые скобки.
#программирование
#python
▫️Список — это упорядоченная коллекция элементов. Элементы могут иметь любой тип. При этом коллекцию можно изменять: вставить новый элемент, удалить старый и т.д. То есть длина у списка динамическая — при необходимости Python будет выделять новую память.
Список создаётся через квадратные скобки.
▫️Кортеж — это тоже упорядоченная коллекция элементов. Элементы тоже могут иметь любой тип. Однако изменять кортеж нельзя. Кроме того, в памяти Python пустой кортеж — всегда в единственном экземпляре. Пустые списки же каждый раз создаются заново.
Кортеж создаётся через круглые скобки.
#программирование
#python