[Условие] Leetcode #1. Two sum
Ссылка на задачу на Leetcode
Решение
У нас есть массив чисел
Нужно написать функцию, которая возвращает индексы двух чисел из массива
Считаем, что у задачи всегда есть решение и оно только одно.
Отдельный пункт: постараться найти решение, у которого временная сложность меньше O(n^2).
#easy #arrays #twopointers #hashtable
@leetcode_furrycat
Ссылка на задачу на Leetcode
Решение
У нас есть массив чисел
nums
и число target
. Нужно написать функцию, которая возвращает индексы двух чисел из массива
nums
, которые в сумме дают target
. Нельзя использовать один и тот же элемент дважды.Считаем, что у задачи всегда есть решение и оно только одно.
Отдельный пункт: постараться найти решение, у которого временная сложность меньше O(n^2).
Кейс #1:
nums = [2,7,11,15]
target = 9
output = [0,1]
Кейс #2:
nums = [3,2,4]
target = 6
output: [1,2]
Кейс #3:
nums = [3,3]
target = 6
output = [0,1]
#easy #arrays #twopointers #hashtable
@leetcode_furrycat
LeetCode
Two Sum - LeetCode
Can you solve this real interview question? 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…
You may assume that each input would have exactly one solution, and you may not…
[Решение] Leetcode #1. Two sum
Условие задачи
👉 Решение #1. Самое очевидное
Перебираем каждый элемент массива nums в цикле.
Пытаемся складывать его с каждый элементом массива nums, кроме него самого - то есть запускаем второй цикл.
Находим нужную пару.
Временная сложность - O(n^2), так как мы дважды перебираем массив.
👉 Решение #2. Хеш-таблица
Заводим хеш-таблицу hash.
Перебираем каждый элемент массива nums в цикле.
Вычитаем его из target - это искомая пара.
Смотрим, есть ли эта пара в hash. Если есть - решение найдено.
Если нет, записываем текущий элемент в хеш. Ключом является сам элемент, чтобы его было просто найти, а значением - его индекс в массиве.
Временная сложность - O(n), так как цикл по массиву тут всего один. Время записи и извлечения значения в/из хеш-таблицы - константа.
👉 Решение #3. Два указателя
Сортируем массив, так чтобы числа в нем шли по порядку, например, от меньше к большему.
Устанавливаем один указать в начало массива (с меньшего числа) , а второй - в конец (с большего числа).
Складываем элементы под указателями. Если полученная сумма больше target, двигаем правый указатель влево (уменьшаем число под ним).
Если полученная сумма меньше target, двигаем левый указатель вправо (увеличиваем число под ним).
Временная сложноть - O(n * log n). Это сложность алгоритма сортировки. Сам поиск пары имеет сложность O(n).
Видео с разбором всех трех решений (англ.)
#easy #arrays #twopointers #hashtable
@leetcode_furrycat
Условие задачи
👉 Решение #1. Самое очевидное
Перебираем каждый элемент массива nums в цикле.
Пытаемся складывать его с каждый элементом массива nums, кроме него самого - то есть запускаем второй цикл.
Находим нужную пару.
Временная сложность - O(n^2), так как мы дважды перебираем массив.
👉 Решение #2. Хеш-таблица
Заводим хеш-таблицу hash.
Перебираем каждый элемент массива nums в цикле.
Вычитаем его из target - это искомая пара.
Смотрим, есть ли эта пара в hash. Если есть - решение найдено.
Если нет, записываем текущий элемент в хеш. Ключом является сам элемент, чтобы его было просто найти, а значением - его индекс в массиве.
Временная сложность - O(n), так как цикл по массиву тут всего один. Время записи и извлечения значения в/из хеш-таблицы - константа.
👉 Решение #3. Два указателя
Сортируем массив, так чтобы числа в нем шли по порядку, например, от меньше к большему.
Устанавливаем один указать в начало массива (с меньшего числа) , а второй - в конец (с большего числа).
Складываем элементы под указателями. Если полученная сумма больше target, двигаем правый указатель влево (уменьшаем число под ним).
Если полученная сумма меньше target, двигаем левый указатель вправо (увеличиваем число под ним).
Временная сложноть - O(n * log n). Это сложность алгоритма сортировки. Сам поиск пары имеет сложность O(n).
Видео с разбором всех трех решений (англ.)
#easy #arrays #twopointers #hashtable
@leetcode_furrycat
Telegram
Leetcode Challenge
[Условие] Leetcode #1. Two sum
Ссылка на задачу на Leetcode
Решение
У нас есть массив чисел nums и число target.
Нужно написать функцию, которая возвращает индексы двух чисел из массива nums, которые в сумме дают target. Нельзя использовать один и тот…
Ссылка на задачу на Leetcode
Решение
У нас есть массив чисел nums и число target.
Нужно написать функцию, которая возвращает индексы двух чисел из массива nums, которые в сумме дают target. Нельзя использовать один и тот…
Решенные задачи
1 - Two sum
2 - Add two numbers
3 - Longest Substring Without Repeating Characters
4 - Median of Two Sorted Arrays
5 - Longest Palindromic Substring
10 - Regular Expression Matching
11 - Container With Most Water
15 - 3Sum
33 - Search in Rotated Sorted Array
53 - Maximum Subarray
121 - Best Time to Buy and Sell Stock
152 - Maximum Product Subarray
153 - Find Minimum in Rotated Sorted Array
217 - Contains Duplicate
238 - Product of Array Except Self
По сложности
#easy
#medium
#hard
По темам и методам решения
#strings
#arrays
#linkedlists
#dp
#divideandconquer
#twopointers
#hashtable
#prefixsum
#ретро
1 - Two sum
2 - Add two numbers
3 - Longest Substring Without Repeating Characters
4 - Median of Two Sorted Arrays
5 - Longest Palindromic Substring
10 - Regular Expression Matching
11 - Container With Most Water
15 - 3Sum
33 - Search in Rotated Sorted Array
53 - Maximum Subarray
121 - Best Time to Buy and Sell Stock
152 - Maximum Product Subarray
153 - Find Minimum in Rotated Sorted Array
217 - Contains Duplicate
238 - Product of Array Except Self
По сложности
#easy
#medium
#hard
По темам и методам решения
#strings
#arrays
#linkedlists
#dp
#divideandconquer
#twopointers
#hashtable
#prefixsum
#ретро
Telegram
Leetcode Challenge
[Условие] Leetcode #1. Two sum
Ссылка на задачу на Leetcode
Решение
У нас есть массив чисел nums и число target.
Нужно написать функцию, которая возвращает индексы двух чисел из массива nums, которые в сумме дают target. Нельзя использовать один и тот…
Ссылка на задачу на Leetcode
Решение
У нас есть массив чисел nums и число target.
Нужно написать функцию, которая возвращает индексы двух чисел из массива nums, которые в сумме дают target. Нельзя использовать один и тот…
[Условие] Leetcode #121. Best Time to Buy and Sell Stock
Ссылка на задачу на Leetcode
Решение
У нас есть некоторая акция, цена которой каждый день меняется. Эти цены занесены в массив
Ограничения:
#easy #arrays #twopointers
@leetcode_furrycat
Ссылка на задачу на Leetcode
Решение
У нас есть некоторая акция, цена которой каждый день меняется. Эти цены занесены в массив
prices
. Необходимо определить самую выгодную комбинацию дней для покупки и продажи этой акции. Разумеется, нельзя продать раньше, чем купишь. Функция должна вернуть размер максимальной прибыли.
Кейс 1:
prices: [7, 1, 5, 3, 6, 4]
ответ: 5
объяснение: выгоднее всего купить акцию во второй день (цена = 1) и продать в пятый (цена = 6)
Кейс 2:
prices: [7,6,5,4,3,1]
ответ: 0
объяснение: с этой акции в этот период нельзя получить прибыль
Ограничения:
prices.length = [1, 10^5]
prices[i] = [0, 10^4]
#easy #arrays #twopointers
@leetcode_furrycat
LeetCode
Best Time to Buy and Sell Stock - LeetCode
Can you solve this real interview question? Best Time to Buy and Sell Stock - You are given an array prices where prices[i] is the price of a given stock on the ith day.
You want to maximize your profit by choosing a single day to buy one stock and choosing…
You want to maximize your profit by choosing a single day to buy one stock and choosing…
[Решение] Leetcode #121. Best Time to Buy and Sell Stock
Условие задачи
Используем подход с двумя указателями (`left` и `right`). Изначально устанавливаем их на первый и второй день.
Если цена между этими днями упала, то этот период нам не нужен. Можем сдвинуть указатели -
Если цена между этими днями выросла, то считаем прибыль и записываем ее во временную переменную. После этого сдвигаем только
Повторяем эту операцию в цикле, пока
Таким образом мы учитываем все периоды, в которые была прибыль.
Если обнаруживаем падение цены (`right` меньше `left`
#easy #arrays #twopointers
@leetcode_furrycat
Условие задачи
Используем подход с двумя указателями (`left` и `right`). Изначально устанавливаем их на первый и второй день.
Если цена между этими днями упала, то этот период нам не нужен. Можем сдвинуть указатели -
left
встает на место right
, а right
сразу же за ним. Если цена между этими днями выросла, то считаем прибыль и записываем ее во временную переменную. После этого сдвигаем только
right
(на одну позицию дальше), так как в следующие дни акция снова смогла вырасти.Повторяем эту операцию в цикле, пока
right
не достигнет конца массива. Таким образом мы учитываем все периоды, в которые была прибыль.
Если обнаруживаем падение цены (`right` меньше `left`
),
то начинаем отсчет с этого места, так как для всех дальнейших периодов прибыль с нового `left` будет больше, чем со старого.
#easy #arrays #twopointers
@leetcode_furrycat
Telegram
Leetcode Challenge
[Условие] Leetcode #121. Best Time to Buy and Sell Stock
Ссылка на задачу на Leetcode
У нас есть некоторая акция, цена которой каждый день меняется. Эти цены занесены в массив prices. Необходимо определить самую выгодную комбинацию дней для покупки и продажи…
Ссылка на задачу на Leetcode
У нас есть некоторая акция, цена которой каждый день меняется. Эти цены занесены в массив prices. Необходимо определить самую выгодную комбинацию дней для покупки и продажи…
[Условие] Leetcode #217. Contains Duplicate
Ссылка на задачу на Leetcode
Решение
Получаем на вход массив целых чисел
#easy #arrays #hashtable
@leetcode_furrycat
Ссылка на задачу на Leetcode
Решение
Получаем на вход массив целых чисел
nums
. Нужно вернуть true
, если хоть одно значение встречается два раза (или больше).
Кейс 1
nums = [1,2,3,1]
output: true
Кейс 2
numbs = [1,2,3,4]
output: false
#easy #arrays #hashtable
@leetcode_furrycat
LeetCode
Contains Duplicate - LeetCode
Can you solve this real interview question? Contains Duplicate - Given an integer array nums, return true if any value appears at least twice in the array, and return false if every element is distinct.
Example 1:
Input: nums = [1,2,3,1]
Output: true…
Example 1:
Input: nums = [1,2,3,1]
Output: true…
[Решение] Leetcode #217. Contains Duplicate
Условие задачи
Задачка выглядит несложной. В голову приходят два способа решения.
1 - с помощью хеша.
Создаем дополнительный объект, который будет служить хешем (трата памяти).
Проходим в цикле по каждому элементу массива и записываем его как ключ хеша.
Если такой элемент в хеше уже есть, значит, есть совпадение, возвращаем true.
2 - с использованием
Создаем из нашего массива
Оба алгоритма имеют сложность O(n).
#easy #arrays #hashtable
@leetcode_furrycat
Условие задачи
Задачка выглядит несложной. В голову приходят два способа решения.
1 - с помощью хеша.
Создаем дополнительный объект, который будет служить хешем (трата памяти).
Проходим в цикле по каждому элементу массива и записываем его как ключ хеша.
Если такой элемент в хеше уже есть, значит, есть совпадение, возвращаем true.
2 - с использованием
Set
. Создаем из нашего массива
Set
(без дублирующихся элементов) и сравниваем их размеры.Оба алгоритма имеют сложность O(n).
#easy #arrays #hashtable
@leetcode_furrycat
Telegram
Leetcode Challenge
[Условие] Leetcode #217. Contains Duplicate
Ссылка на задачу на Leetcode
Получаем на вход массив целых чисел nums. Нужно вернуть true, если хоть одно значение встречается два раза (или больше).
Кейс 1
nums = [1,2,3,1]
output: true
Кейс 2
numbs = [1,2…
Ссылка на задачу на Leetcode
Получаем на вход массив целых чисел nums. Нужно вернуть true, если хоть одно значение встречается два раза (или больше).
Кейс 1
nums = [1,2,3,1]
output: true
Кейс 2
numbs = [1,2…