1 Star 0 Fork 0

SatelliteR63/LeetCode

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
2055.cpp 2.08 KB
一键复制 编辑 原始数据 按行查看 历史
SatelliteR63 提交于 2022-03-26 22:30 +08:00 . 3.26
#include <iostream>
#include <math.h>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
class Solution
{
public:
vector<int> platesBetweenCandles(string s, vector<vector<int>> &queries)
{
vector<int> ans(queries.size(), 0);
// left,right表示第i处左右的第一个蜡烛处
vector<int> preSum(s.size(), 0), left(s.size(), 0), right(s.size(), 0);
int flag = 0, cnt = 0;
for (int i = 0; i < s.size(); i++) //处理前缀和
{
if (flag == 0 && s[i] == '|')
flag = 1;
else if (flag == 1)
{
if (s[i] == '*')
{
cnt++;
preSum[i] = preSum[i - 1];
}
else if (s[i] == '|')
{
preSum[i] = cnt;
}
}
}
for (int i = 0; i < s.size(); i++) //处理左方向第一个蜡烛
{
if (s[i] == '|')
left[i] = i;
else if (i >= 1 && s[i] == '*')
left[i] = left[i - 1];
}
for (int i = s.size() - 1; i >= 0; i--) //处理右方向第一个蜡烛
{
if (s[i] == '|')
right[i] = i;
else if (i < s.size() - 1 && s[i] == '*')
right[i] = right[i + 1];
}
int l = 0, r = 0;
for (int i = 0; i < queries.size(); i++)
{
l = queries[i][0], r = queries[i][1];
if (l != r && left[r] >= right[l])
ans[i] = preSum[left[r]] - preSum[right[l]];
}
// for (int i = 0; i < preSum.size(); i++)
// {
// cout << preSum[i] << endl;
// }
return ans;
}
};
int main()
{
Solution *s = new Solution();
// vector<vector<int>> queries{{1, 17}, {4, 5}, {14, 17}, {5, 11}, {15, 16}};
vector<vector<int>> queries{{3, 3}};
vector<int> ans = s->platesBetweenCandles("|*|*", queries);
for (int i = 0; i < ans.size(); i++)
{
cout << ans[i] << endl;
}
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/satelliter63/leet-code.git
git@gitee.com:satelliter63/leet-code.git
satelliter63
leet-code
LeetCode
master

搜索帮助