11. 盛最多水的容器
·
这题使用双指针来做很快就能实现,但是一般我们很难想到使用双指针来解决这个问题,我一开始想的就是用dp问题解法,因为之前是遇到过类似的问题42. 接雨水 - 力扣(LeetCode),这个也是类似的数组,求面积最大的问题,而且那题确实是用dp问题方法求解的,但是在这题要使用双指针很轻松就能解答出,看官方解答很快,主要的思想就是如果我们不移动短的那个边界,而是只移动长的边界会导致最终结果不会得到更新,所以我们不能固定短的边界,我们需要更新短的边界
只有更新掉短的地方才有可能有进步
class Solution {
public int maxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int ans = 0;
while (l < r) {
int area = (r - l) * Math.min(height[l], height[r]);
ans = Math.max(ans, area);
if (height[l] < height[r]) {
l++;
}else {
r--;
}
}
return ans;
}
}
更多推荐
所有评论(0)