11.盛水最多的容器
来更新啦来更新啦
最近想要练习一下贪心,可能已开始只能学习代码,希望后面做多了自己可以写出来怀挺~
- 题目描述
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
11.盛水最多的容器
- 代码
这题感觉暴力肯定会超,let me try try
奶思奶思,完美超时
class Solution {
public:
int maxArea(vector<int>& height) {
int max_volum = 0;
for(int i = 0 ; i < height.size() - 1 ; i++){
for(int j = i + 1 ; j < height.size() ; j++){
int cur_volum = min(height[i],height[j]) * (j - i);
if(cur_volum > max_volum)
max_volum = cur_volum;
}
}
return max_volum;
}
};
看了题解,使用双指针,官方说第一次可能想不到双指针,bingo!
使用双指针,i指向数组最左边,j指向最右边,每次计算结束后移动指针所指向数字最小的指针,详细见官方题解
官方题解
class Solution {
public:
int maxArea(vector<int>& height) {
int max_volum = 0;
int i = 0 ; int j = height.size() - 1;
while(j > i){
int cur_volum = min(height[i],height[j]) * (j - i);
if(cur_volum > max_volum)
max_volum = cur_volum;
if(height[i] <= height[j])
i++;
else
j--;
}
return max_volum;
}
};
这篇博客探讨了如何使用贪心算法解决一个经典的计算机科学问题——在给定高度的数组中找到能盛最多水的两个竖直边。作者首先尝试了暴力求解但导致超时,然后采用了双指针方法,从数组的两端开始,每次移动指向较矮边的指针,从而优化了时间复杂度。最终代码展示了如何通过这种方法有效地计算最大盛水量。
1753

被折叠的 条评论
为什么被折叠?



