题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
思路:双指针 i j 指向头尾
在整个过程维护一个最大的面积。
当前面积 > 最大面积 赋值给最大面积
当前面积 <= 最大面积 让 ij对应的最小元素的下标+1
复杂度: 时间复杂度O(n) 空间复杂度 O(1)
代码:
ps:下边代码加入了标准输入
'''
题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
思路:双指针 i j 指向头尾
在整个过程维护一个最大的面积。
当前面积 > 最大面积 赋值给最大面积
当前面积 <= 最大面积 让 ij对应的最小元素的下标+1
ps:下边代码加入了标准输入
复杂度: 时间复杂度O(n) 空间复杂度 O(1)
'''
import sys
def maxArea(nums):
i, j = 0, len(nums)-1
maxarea = 0
while i <= j:
temparea = (j-i)*min(nums[i], nums[j])
if temparea > maxarea:
maxarea = temparea
if nums[i] < nums[j]:
i += 1
else:
j -= 1
return maxarea
line = sys.stdin.readline().strip().split(",")
nums = []
for i in range(len(line)):
temp = line[i]
if i == 0:
nums.append(int(temp[1]))
elif i == len(line)-1:
nums.append(int(temp[0]))
else:
nums.append(int(temp))
print(nums)
print(maxArea(nums))