LeetCode 2511. 最多可以摧毁的敌人城堡数目

【LetMeFly】2511.最多可以摧毁的敌人城堡数目

力扣题目链接:https://leetcode.cn/problems/maximum-enemy-forts-that-can-be-captured/

给你一个长度为 n ,下标从 0 开始的整数数组 forts ,表示一些城堡。forts[i] 可以是 -10 或者 1 ,其中:

  • -1 表示第 i 个位置 没有 城堡。
  • 0 表示第 i 个位置有一个 敌人 的城堡。
  • 1 表示第 i 个位置有一个你控制的城堡。

现在,你需要决定,将你的军队从某个你控制的城堡位置 i 移动到一个空的位置 j ,满足:

  • 0 <= i, j <= n - 1
  • 军队经过的位置 只有 敌人的城堡。正式的,对于所有 min(i,j) < k < max(i,j)k ,都满足 forts[k] == 0

当军队移动时,所有途中经过的敌人城堡都会被 摧毁

请你返回 最多 可以摧毁的敌人城堡数目。如果 无法 移动你的军队,或者没有你控制的城堡,请返回 0

示例 1:

复制代码
输入:forts = [1,0,0,-1,0,0,0,0,1]
输出:4
解释:
- 将军队从位置 0 移动到位置 3 ,摧毁 2 个敌人城堡,位置分别在 1 和 2 。
- 将军队从位置 8 移动到位置 3 ,摧毁 4 个敌人城堡。
4 是最多可以摧毁的敌人城堡数目,所以我们返回 4 。

示例 2:

复制代码
输入:forts = [0,0,1,-1]
输出:0
解释:由于无法摧毁敌人的城堡,所以返回 0 。

提示:

  • 1 <= forts.length <= 1000
  • -1 <= forts[i] <= 1

方法一:遍历

这道题说白了就是问你1-1之间最大的连续0的个数。

因此我们只需要使用一个变量last来记录上一个非0数是1还是-1,再使用一个变量cnt来记录当前连续0的个数。

接着遍历地图数组:

  • 如果当前元素非零:
    • 就看是否为 "1遇到-1-1遇到1",如果是则更新答案最大值
    • 更新cntlast
  • 否则(当前元素为0): c n t + + cnt++ cnt++

即可。

  • 时间复杂度 O ( l e n ( f o r t s ) ) O(len(forts)) O(len(forts))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++

cpp 复制代码
class Solution {
public:
    int captureForts(vector<int>& forts) {  // 1和-1之间最多连续0的个数
        int ans = 0;
        int last = 2, cnt = 0;
        for (int i = 0; i < forts.size(); i++) {
            if (forts[i]) {
                if ( last != forts[i] && last != 2) {
                    ans = max(ans, cnt);
                }
                last = forts[i];
                cnt = 0;
            }
            else {  // 0
                cnt++;
            }
        }
        return ans;
    }
};

Python

python 复制代码
# from typing import List

class Solution:
    def captureForts(self, forts: List[int]) -> int:
        ans = 0
        last, cnt = 2, 0
        for fort in forts:
            if fort:
                if fort != last and last != 2:
                    ans = max(ans, cnt)
                cnt = 0
                last = fort
            else:
                cnt += 1
        return ans

同步发文于CSDN,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/132634912

相关推荐
Christo3几秒前
TKDE-2026《Efficient Co-Clustering via Bipartite Graph Factorization》
人工智能·算法·机器学习·数据挖掘
2401_838472511 分钟前
C++异常处理最佳实践
开发语言·c++·算法
m0_736919105 分钟前
C++中的类型标签分发
开发语言·c++·算法
2301_7903009612 分钟前
C++与微服务架构
开发语言·c++·算法
重生之我是Java开发战士18 分钟前
【优选算法】前缀和:一二维前缀和,寻找数组的中心下标,除自身以外数组的乘积,和为K的子数组,和可被K整除的子数组,连续数组,矩阵区域和
线性代数·算法·矩阵
梵刹古音20 分钟前
【C语言】 循环结构
c语言·开发语言·算法
皮皮哎哟28 分钟前
冒泡排序与数组传递全解析 一维二维指针数组及二级指针应用指南
c语言·算法·冒泡排序·二维数组·指针数组·传参·二级指针
m0_5613596729 分钟前
C++代码冗余消除
开发语言·c++·算法
近津薪荼40 分钟前
优选算法——滑动窗口1(单调性)
c++·学习·算法
diediedei41 分钟前
嵌入式C++驱动开发
开发语言·c++·算法