From e478221c9854c0ee5427fff1fd1dfa076c7623b6 Mon Sep 17 00:00:00 2001 From: t0xa Date: Wed, 4 Feb 2026 21:10:40 +0300 Subject: [PATCH] Add solution to biggest container --- algocode/two_pointers/biggest_container.py | 57 ++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 algocode/two_pointers/biggest_container.py diff --git a/algocode/two_pointers/biggest_container.py b/algocode/two_pointers/biggest_container.py new file mode 100644 index 0000000..2c9b2be --- /dev/null +++ b/algocode/two_pointers/biggest_container.py @@ -0,0 +1,57 @@ +""" +Дан массив целых чисел nums, nums[i] – высота линии. Нужно найти максимальную площадь, которую может заполнить вода между двумя линиями. + +ВАЖНО: площадь воды считается как min(nums[i], nums[j]) * (j - i), где i – индекс первой линии, а j - номер второй. + +Пример 1: +Ввод: nums = [1,8,6,2,5,4,8,3,7] +Вывод: 49 +Объяснение: 7 * (8 - 1) = 49, "1" - индекс первой линии, "8" - второй + +Пример 2: +Ввод: nums = [2,3,4,5] +Вывод: 6 + +Ограничения: +len(nums) >= 2 + +i j +2,3,4,5 +0 1 2 3 + +cur_max = 2 * 3 = 6 +1: двигаем i + + i j +2,3,4,5 +0 1 2 3 + +cur_max = 3 * 2 = 6 +1: двигаем i + + + i j +2,3,4,5 +0 1 2 3 + +cur_max = 4 * 1 = 4 + +""" + +def solve(nums): + max = 0 + i = 0 + j = len(nums) - 1 + while i < j: + cur_max = min(nums[i], nums[j]) * (j - i) + if cur_max > max: + max = cur_max + if nums[i] <= nums[j]: + i += 1 + else: + j -= 1 + return max + + +print(f"exp 49, got: {solve([1,8,6,2,5,4,8,3,7])}") +print(f"exp 6, got: {solve([2,3,4,5])}")