文章目录
- Tag
- 题目来源
- 题目解读
- 解题思路
- 复杂度分析
- 写在最后
Tag
【数组】
题目来源
2511. 最多可以摧毁的敌人城堡数目

题目解读
在数组 forts 中,forts[i] 有三种数值:
-1: 表示第i个位置没有城堡,是空地;0: 表示第i个位置有一个敌人城堡;1: 表示第i个位置有一个你控制的城堡。
需要计算从你的城堡走到空地需要摧毁的敌人城堡的最大数量。
解题思路
我们只需要统计相邻的 -1 和 1 中间 0 的数量,最后返回最大的 0 的数量。
实现上,我们使用 pre 变量记录上一个 -1 或者 1 出现的位置,我们从左到右遍历 forts 数组:
- 假设我们遇到了
1,而forts[pre] = -1,那么更新答案res = max(res, i - pre - 1),我们用i - pre - 1来计算相邻的-1和1中间0的数量; - 假设我们遇到了
-1,而forts[pre] = 1,那么更新答案res = max(res, i - pre - 1); - 最后要及时更新
pre = i。
实现代码
class Solution {
public:
int captureForts(vector<int>& forts) {
int pre = 0, res = 0;
for (int i = 0; i < forts.size(); ++i) {
if ((forts[i] == -1 || forts[i] == 1)) {
if (forts[i] == -forts[pre]) {
res = max(res, i - pre - 1);
}
pre = i;
}
}
return res;
}
};
复杂度分析
时间复杂度:
O
(
n
)
O(n)
O(n),
n
n
n 为数组 forts 的长度。
空间复杂度:
O
(
1
)
O(1)
O(1),因为仅使用了一个额外的变量 pre 记录上一个 -1 或者 1 出现的位置。
写在最后
以上就是本篇文章的内容了,感谢您的阅读。🍗🍗🍗
如果感到有所收获的话可以给博主点一个 👍 哦。
如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出。💬💬💬



















