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

相关推荐
王老师青少年编程15 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮16 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说16 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove17 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung17 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了17 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL18 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
谭欣辰18 小时前
C++ 排列组合完整指南
开发语言·c++·算法
代码中介商18 小时前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法
foundbug99919 小时前
自适应滤除直达波干扰的MATLAB实现
开发语言·算法·matlab