容器盛水问题-栈解决方式

容器盛水问题

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

这道题跟寻找一个数组中每个数后面的第一个比它大的数有相似之处,
都会自然想到用栈来解决,这道题的不同之处在于找到桶的边界。
首先整个数组的首尾肯定是桶的一个边界。因此我们从左往右边开始找
桶的边界,可以将桶分为以下几个情况:
a)5 1 1 1 1 6,桶左边界低
b)1 2 3 4 5 6,不能构成桶,桶边界递增
c)6 5 4 3  2 1,不能构成桶,桶边界递减
d)6 1 1 1 1 5,桶边界右边界低
数组的组成就是abcd这四种情况的随机组合,因此根据这几种桶的情
况,就可以利用栈来书写程序了
class Solution {
public:
    long long maxWater(vector<int>& arr) {
        //先找比之前元素大的,若没有找第二大的
        //数组大小n,output为水滴数,定义一个栈pos存放“木板”长度
        //,定义好栈和buck为桶的低边界的初始状态
        int n=arr.size();
        long long output(0);
        stack<int> pos;
        pos.push(arr[0]);
        int buck(arr[0]);
        //开始从左往右找,处理a,b两种桶的情况
        for(int i=1;i<n;i++){
            if(arr[i]<buck){
                pos.push(arr[i]);
            }
            else
            {
                while(!pos.empty()){
                    output=buck-pos.top()+output;
                    pos.pop();
                }
                pos.push(arr[i]);
                buck=arr[i];
            }
        }
        //若栈不为空说明当前buck代表的左边界比右边界高
        //逐个弹出栈中数据,处理cd两种状态下的桶
        while(!pos.empty())
        {
            buck=pos.top();
            pos.pop();
            while(!pos.empty()&&pos.top()<buck)
            {
                output=buck-pos.top()+output;
                pos.pop();
            }
        }
        return output;
    }
};


全部评论
还有一种情况,也不能成桶,1 2 3 6 5 4,你想到了吗?
点赞 回复 分享
发布于 2021-06-20 23:08

相关推荐

关于我大学本科四年,想了很多,但还是不知道该怎么动笔&nbsp;“大学四年,是我从懵懂少年走向职场青年的转折期。这一路跌跌撞撞,有迷茫,有遗憾,也有成长和决心。”&nbsp;大一刚进来时仍然有高中那股学习劲,经常一个人去图书馆学高等数学,但后面劲头一过便开始在宿舍开启躺平生活(现在想想那段时间真的很爽,无忧无虑)。由于大一担任班干部,所以经常要跟其他班的班干部交流,在此期间认识了隔壁班的一位女生,短发而很可爱,因为很多团建还有比赛都是我们两班一起参加的,而且我和她都是负责人,所以交集很多,后面慢慢地彼此对产生了好感,所以在大一刚开学的2个月后,我们在一起了,彼此之前都是初恋。但当时我真的是太太太直男了,对感情的想...
真烦好烦真烦:骗哥们可以,别把你自己也骗到了就行。哥们被你骗了真无所谓的,打个哈哈就过了。但希望你打完这段话后擦一下眼角,别让眼泪掉在手机屏幕上了就行。你说的这些话,哥们信一下也是没什么的。还能让你有个心里安慰,但这种话说出来骗骗兄弟就差不多得了,哥们信你一下也不会少块肉,但是你别搞得自己也当真了就行。哥们被你骗一下是真无所谓的,兄弟笑笑也就过去了。真不是哥们想要破你防,你擦擦眼泪好好想想,除了兄弟谁还会信你这些话?
点赞 评论 收藏
分享
求面试求offer啊啊啊啊:要求太多的没必要理
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务