[leetcode] 2055蜡烛之间的盘子 | 前缀和

简介: 在这里做出处理,让下标从1开始,询问的区间两端也+1我们开两个数组: nearL 以及 nearRnearL[i] 表示:在i 位置离着最近的左边的 ∣符号是在哪一个下标nearR[i] 表示:在i 位置离着最近的右边的 ∣符号是在哪一个下标如果说 s[i] == '|' 那么说 nearL[i]=i 并且 nearR[i]=i让左区间等于离着当前位置最近的右边的 |让右区间等于离着当前位置最近的左边的 |然后就可以直接开始 前缀和 了

题目链接


b705be2fae3242e5881cd9877e272b2f.png

在这里做出处理,让下标从1开始,询问的区间两端也+1

我们开两个数组: nearL 以及 nearR

nearL[i] 表示:在i 位置离着最近的左边的 ∣符号是在哪一个下标

nearR[i] 表示:在i 位置离着最近的右边的 ∣符号是在哪一个下标

如果说 s[i] == '|' 那么说 nearL[i]=i 并且 nearR[i]=i

让左区间等于离着当前位置最近的右边的 |

让右区间等于离着当前位置最近的左边的 |

然后就可以直接开始 前缀和


Code:


class Solution {
public:
    vector<int> platesBetweenCandles(string s, vector<vector<int>>& queries) {
        const int N = s.size();
        int cnt2[N+7];
        vector<int> ans;
        s = "#" + s;
        int tot = queries.size();
        for(vector<int> &v:queries) {
            v[0] += 1;
            v[1] += 1;
        }
        int nearL[N+7], nearR[N+7];
        memset(nearL,0,sizeof nearL);
        memset(nearR,0,sizeof nearR);
        cnt2[0] = 0; 
        for (int i = 1;i <= N;i ++) {
            if(s[i] == '|') {
                cnt2[i] = cnt2[i-1];
                nearL[i] = i;
            } else {
                cnt2[i] = cnt2[i-1] + 1;
                nearL[i] = nearL[i-1];
            }
        }
        for(int i=N;i>=1;i--) {
            if(s[i] == '|') nearR[i] = i;
            else nearR[i] = nearR[i+1];
        }
        for(vector<int> v : queries) {
            int l = v[0], r = v[1];
            if(l == r) {
                ans.push_back(0);
                continue;
            }
            int tl,tr;
            tl = nearR[l];
            tr = nearL[r];
            if(tl >= tr) ans.push_back(0);
            else ans.push_back(cnt2[tr] - cnt2[tl-1]);
        }
        return ans;
    }
};

ef0ac8e01e42495784e27e07944afb47.png


文章知识点与官方知识档案匹配,可进一步学习相关知识

算法技能树leetcode-动态规划22-括号生成8256 人正在系统学习中


目录
相关文章
|
算法 Android开发 索引
LeetCode 周赛上分之旅 #44 同余前缀和问题与经典倍增 LCA 算法
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
73 0
|
3月前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
LeetCode-798 得分最高的最小论调 及差分和前缀和的学习
LeetCode-798 得分最高的最小论调 及差分和前缀和的学习
|
机器学习/深度学习
LeetCode-2055 蜡烛之间的盘子 及库函数 lower_bound 和 upper_bound学习使用
LeetCode-2055 蜡烛之间的盘子 及库函数 lower_bound 和 upper_bound学习使用
|
4月前
|
自然语言处理 索引
leetcode-745:前缀和后缀搜索
leetcode-745:前缀和后缀搜索
47 0
|
4月前
|
Go
golang力扣leetcode 2055.蜡烛之间的盘子
golang力扣leetcode 2055.蜡烛之间的盘子
24 0
|
4月前
[leetcode 前缀和]
[leetcode 前缀和]
|
算法 索引
LeetCode算法小抄--数组(双指针、差分数组、前缀和)
LeetCode算法小抄--数组(双指针、差分数组、前缀和)
|
人工智能 算法 搜索推荐
LeetCode 周赛 338,贪心 / 埃氏筛 / 欧氏线性筛 / 前缀和 / 二分查找 / 拓扑排序
大家好,我是小彭。 上周末是 LeetCode 第 338 场周赛,你参加了吗?这场周赛覆盖的知识点很多,第四题称得上是近期几场周赛的天花板。
102 0
|
算法
LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树
今天讲 LeetCode 单周赛第 340 场,今天状态不好,掉了一波大分。
91 0