力扣 题目11- 盛最多水的容器

题目


题解


 

这题一看 好!直接把所有情况遍历一下 暴力破解 结束了.唉?不对不对力扣肯定会出一堆数。

事实果然如此

 

我去这那只要是双遍历就不行了呗,那我们只能换一种思路了,

首先看这个图 这个水槽边界肯定是一左一右 那么我们先把最左和最右设上木板 这时记录一下面积

然后我们肯定要移动这个木板,但是怎么移是问题了 仔细想一下就知道

高的肯定不能移 因为高的可能和其他比他矮木板的组成水槽 所以当谁矮的时候就向中间进一步 当木板重叠时结束循环

然后在这个过程中我们记录一下最大面积的那个数 输出即可

 代码


暴力解法:(力扣过不了)

#include <iostream>
#include<vector>
using namespace std;
class Solution {
public:
    int maxArea(vector<int>& height) {
        vector<int> kuang;
        bool first = false;
        int first2 = 0;
        int width = 0;
        int max = 0;
        int max2 = 0;
        for (int i = 0; i < height.size(); i++) {
            if (max2 < height[i]) {
                max2 = height[i];
                }
        }
        for (int i = max2; i >0; i--) {
            width = 0;
            first2 = -1;
            first = false;
            for (int j = 0; j < height.size(); j++) {
                if (height[j] >= i) {
                    if (!first) {
                        first2 = j;
                        first = true;
                    }
                    else {
                        width = j - first2;
                    }
                }
            }
            if (max < width * i) {
                max = width * i;
            }
        }
        return max;
    }
};
int main() {
    vector<int> height = {2,3,10,5,7,8,9};
    Solution sol;
    int max=sol.maxArea(height);
    cout << max << endl;

}

真正解法:

#include <iostream>
#include<vector>
using namespace std;
class Solution {
public:
    int maxArea(vector<int>& height) {
        int play = 0;
        int end = height.size()-1;
        int max=0;
        for (; play != end;) {
            int measure = (end-play) * min(height[end], height[play]);
            if (max < measure) {
                max = measure;
            }
            if (height[play] <= height[end]) {
                play = play + 1;
            }
            else {
                end = end - 1;
            }
        }
        return max;
    }
};
int main() {
    vector<int> height = { 1,1};
    Solution sol;
    int max=sol.maxArea(height);
    cout << max << endl;

}
posted @ 2022-03-28 18:30  无聊的阿库娅  阅读(24)  评论(0编辑  收藏  举报