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