题目描述: 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
解法1:暴力法
思路: 对所有的线两两求出面积 时间复杂度O(n2)
解法2: 双向指针法
思路:一个指针指向第一个元素, 另一个指针指向最后一个元素. 每次都求一个面积,并用一个变量保存起来,并且我们每次移动指向较短线条的那个指针. 然后在求面试,如果比上一次的面积大则更心最大值.否则重复上面的过程
代码:
class Solution {
private int[] height;
public int maxArea(int[] height) {
this.height = height;
int l = 0, r = height.length - 1;
int maxArea = getArea(l, r);
while (l != r) {
if (height[l] <= height[r]) {
l++;
} else {
r--;
}
maxArea = Math.max(maxArea, getArea(l, r));
}
return maxArea;
}
private int getArea(int l, int r) {
int length = r - l;
int width = Math.min(height[l], height[r]);
return length * width;
}
public static void main(String[] args) {
System.out.println(new Solution().maxArea(new int[]{1, 8, 6, 2, 5, 4, 8, 3, 7}));
}
}
标签:容器,指向,int,height,ai,最多水,指针 来源: https://blog.csdn.net/idefined/article/details/104867111
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。