原题链接Container With Most Water
意思是有n个坐标点,横坐标是索引,纵坐标给出,从每个点向x轴做垂线,求最大面积
蛮力法将所有情况都判断一遍复杂度在O(n2),两层for循环。
优化的话,可以考虑使用动态规划,dp[i][j]表示从i到j这个范围最大的面积,但是后来发现仍然复杂度过高,看了答案发现自己好蠢。。。
首先还是先看动态规划把,然后在这个基础上进行优化。
dp含义如上,假设当前位置在i, j,所以dp[i][j]有以下几种取值
- (j - i) * min(height[i], height[j]),这是将i和j作为两个边界,算出面积
- dp[i + 1][j]
- dp[i][j - 1]
后两个就是动态向中间缩,然后dp[i][j]的值其实就是这三个中的最大那个。
然而,考虑一个问题,假设height[i] < height[j],那么dp[i][j - 1]永远是小于(j - i) * min(hei