Add solution to biggest container
This commit is contained in:
parent
6ee4e10ec9
commit
e478221c98
1 changed files with 57 additions and 0 deletions
57
algocode/two_pointers/biggest_container.py
Normal file
57
algocode/two_pointers/biggest_container.py
Normal file
|
|
@ -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])}")
|
||||||
Loading…
Reference in a new issue