题干:

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。

解题思路:

采用双指针,一个放左边一个放右边,取两者之间比较矮小的墙壁(较小的数)向中间移动,直到两个指针靠拢为止。

AC代码:

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    int temp;
    vector<int> a(n);
    for(int i=0;i<n;i++){
        cin>>temp;
        a[i] = temp;
    }
    int i = 0;
    int j = n - 1;
    int result = (j - i) * min(a[i], a[j]);
    while(i<j){
        if(a[i]<=a[j]){
            i++;
            int s = (j - i) * min(a[i], a[j]);
            result = max(s,result);
        }
        else{
            j--;
            int s = (j - i) * min(a[i], a[j]);
            result = max(s,result);
        }
    }
    cout << result;
return 0;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐