极简解法

容器盛水问题

http://www.nowcoder.com/questionTerminal/31c1aed01b394f0b8b7734de0324e00f

我亲爱的小同学们,这其实是个脑筋急转弯…… - -|||
一个位置的液柱高度只取决于三个因素:左边最高多高、右边最高多高、底多高。
所以,O(n)扫描记录一下前两个参数,然后直接算就行……

        int n=arr.size();
        auto lm=new int[n+10];lm+=1;
        auto rm=new int[n+10];rm+=1;
        lm[-1]=rm[n]=0;
        for (int i=0;i<n;++i)
        {
            lm[i]=max(lm[i-1],arr[i]);
            rm[n-i-1]=max(rm[n-i],arr[n-i-1]);
        }
        long long  res=0;
        for (int i=0;i<n;++i)
            res+=max(0, min(lm[i-1],rm[i+1])-arr[i]  );
全部评论
但是也没有必要new int[n + 10]吧;n + 2就够了
点赞 回复 分享
发布于 2021-02-06 19:55

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
17 1 评论
分享
牛客网
牛客企业服务