• LeetCode 11 盛水最多的容器


    暴力

    枚举每个点,复杂度O(n^2)

    双指针

    暴力会有一些不优的情况,本可以排除掉。
    假设左端点是l,右端点是r,答案是 min(h[l] , h[r])(r - l)。如果h[l] < h[r] ,将右端点向左移动一下的话,假设h[r-1] <= h[r],向左移动面积必然减小。若h[r-1] > h[r],min(h[l],h[r-1])不变,距离减小,面积还是减小。所以在h[l] < h[r]的情况下,右端点再向左扫描就没有意义了。因此倒不如记录下当前的答案,因为max(ans,h[l](r-l)) 是以 l 为端点的情况的最优解了,然后向右移动左端点,继续找答案。

    代码

    class Solution {
    public:
        int maxArea(vector<int>& height) {
            int l = 0,r = height.size()-1,ans = 0;
            while(l < r){
                ans = max(ans,min(height.at(l),height.at(r))*(r-l));
                if(height.at(r) >= height.at(l)){
                    ++l;
                }
                else{
                    --r;
                }
            }
            return ans;
        }
    };
    
    岂能尽如人意,但求无愧我心
  • 相关阅读:
    经验1
    Caffe和MatConvNet安装
    Matconvet的学习笔记
    CNN数据准备
    深度学习之卷积和池化
    深度学习之CNN的推导
    深度学习八(总结)
    深度学习七(卷积神经网络)
    深度学习六
    深度学习五
  • 原文地址:https://www.cnblogs.com/Zforw/p/13406616.html
Copyright © 2020-2023  润新知