牛客网第一课第三题
问题:给定一个非负数的数组,数组中的每个值代表一个柱子的高度,柱子的宽度是1。两个柱子之间可以围成一个面积,规定:面积=两根柱子的最小值*两根柱子之间的距离。
例子:数 组[3,4,2,5]。3和4之间围成的面积为0,因为两个柱子是相邻的,中间没有距离。3和 2之间围成的面积为2,因为两个柱子的距离为1,且2是最短的柱子,所以面积=1*2。3和5之间围成的面积为6,因为两个柱子的距离为2,且3是最短的柱子,所以面积= 3*2。求在一个数组中,哪两个柱子围成的面积最大,并返回值。
要求:实现时间复杂度O(N),额外空间复杂度O(1)
类似leetcode上的11题
Container With Most Water,区别是leetcode11的两个相邻位置距离我们当成1处理。
解法1:这道题看起来难度不是很大,最朴素的想法就是对每一个位置遍历一遍,计算这个位置到其他位置围成的面积,保留最大的。这样的时间复杂度为O(N*N),额外空间复杂度O(1)。
解法2:这里我们还是要玩双指针,左指针L指向数组的第一个位置,右指针R指向数组的最后一个位置。取两个位置值小的那一个,记为T,T*(R-L-1)就是L和R围成的面