文章目录
- 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
出现的位置。
写在最后
以上就是本篇文章的内容了,感谢您的阅读。🍗🍗🍗
如果感到有所收获的话可以给博主点一个 👍 哦。
如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出。💬💬💬