力扣:蜡烛之间的盘子

使用了前缀和的知识,但除了前缀和之外,我觉得还有一处地方非常巧妙:用left数组和right数组存放蜡烛的位置,还使用了临时变量l作为过渡,如果查询的一侧没有蜡烛那么数组对应位置就是-1,使得查询蜡烛位置非常的方便!

class Solution {
public:
    vector<int> platesBetweenCandles(string s, vector<vector<int>>& queries) {
        int n = s.size();
        vector<int> preSum(n);
        vector<int> ans;
        for(int i=0, sum=0; i<n; ++i){
            if(s[i]=='*'){
                ++sum;
            }
            preSum[i] = sum;
        }

        vector<int> left(n);
        vector<int> right(n);
        int l=-1;
        for(int i=0; i<n; ++i){
            if(s[i]=='|'){
                l=i;
            }
            left[i] = l;
        }
        for(int i=n-1; i>=0; --i){
            if(s[i]=='|'){
                l=i;
            }
            right[i] = l;
        }

        for(auto& query: queries){
            int x=right[query[0]];
            int y=left[query[1]];
            ans.push_back(x==-1||y==-1||x>=y? 0: preSum[y]-preSum[x]);
        }
        return ans;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值