极简解法

容器盛水问题

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

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
17 1 评论
分享
牛客网
牛客企业服务