【每日一题】最多可以摧毁的敌人城堡数目

Tag

【数组】【2023-09-02】


题目来源

2511. 最多可以摧毁的敌人城堡数目
在这里插入图片描述


题目解读

在数组 forts 中,forts[i] 有三种数值:

  • -1: 表示第 i 个位置没有城堡,是空地;
  • 0: 表示第 i 个位置有一个敌人城堡;
  • 1: 表示第 i 个位置有一个你控制的城堡。

需要计算从你的城堡走到空地需要摧毁的敌人城堡的最大数量。


解题思路

方法一:统计 0 的数量

我们只需要统计相邻的 -11 中间 0 的数量,最后返回最大的 0 的数量。

实现上,我们使用 pre 变量记录上一个 -1 或者 1 出现的位置,我们从左到右遍历 forts 数组:

  • 假设我们遇到了 1,而 forts[pre] = -1,那么更新答案 res = max(res, i - pre - 1),我们用 i - pre - 1 来计算相邻的 -11 中间 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 出现的位置。


写在最后

以上就是本篇文章的内容了,感谢您的阅读。🍗🍗🍗

如果感到有所收获的话可以给博主点一个 👍 哦。

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出。💬💬💬

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wang_nn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值