【每日一题Day313】LC2511最多可以摧毁的敌人城堡数目 | 模拟

简介: 【每日一题Day313】LC2511最多可以摧毁的敌人城堡数目 | 模拟

最多可以摧毁的敌人城堡数目【LC2511】

给你一个长度为 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和-1之间最多的0的个数
  • 实现时,可以使用变量记录军队和空位置的下标,当同时找到两个位置时,对结果进行更新;
  • 当找到新的军队位置或者空位置时,需要判断前一个空位置或者军队位置是否有效
  • 实现
class Solution {
    public int captureForts(int[] forts) {
        int army = -1, empty = -1;// 记录军队和空位置的下标
        int n = forts.length;
        int res = 0;
        for (int i = 0; i < n; i++){
            if (forts[i] == -1){// 找到了一个新的空位置                
                if (army < empty){// 如果军队位置army在旧空位置之前,那么需要寻找新的军队位置
                    army = -1;
                }
                empty = i;
            }else if (forts[i] == 1){// 找到了一个新的军队位置 
                if (empty < army){// 如果空位置empty在旧军队位置之前,那么需要寻找新的空位置
                    empty = -1;
                }
                army = i;
            }
            if (army != -1 && empty != -1){// 找到两个位置时,计算其中的敌人城堡数目
                res = Math.max(res, Math.abs(army - empty) - 1);
            }
        }
        return res;
    }
}

image.png

目录
相关文章
|
5月前
【每日一题Day327】LCP 50. 宝石补给 | 模拟
【每日一题Day327】LCP 50. 宝石补给 | 模拟
26 0
|
5月前
|
机器人
【每日一题Day270】LC874模拟行走机器人 | 哈希表+模拟
【每日一题Day270】LC874模拟行走机器人 | 哈希表+模拟
25 0
|
5月前
【每日一题Day314】LC1921消灭怪物的最大数量 | 贪心+排序
【每日一题Day314】LC1921消灭怪物的最大数量 | 贪心+排序
21 0
|
5月前
【每日一题Day338】LC2582递枕头 | 模拟+数学
【每日一题Day338】LC2582递枕头 | 模拟+数学
11 0
|
6月前
|
算法 Java
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
代码随想录算法训练营第三十四天 | LeetCode 860. 柠檬水找零、406. 根据身高重建队列、452. 用最少数量的箭引爆气球
39 0
|
8月前
leetcode 1921. 消灭怪物的最大数量(每日一题)
leetcode 1921. 消灭怪物的最大数量(每日一题)
55 0
|
9月前
|
算法
算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
算法训练Day35|860.柠檬水找零 ● 406.根据身高重建队列 ● 452. 用最少数量的箭引爆气球
|
11月前
洛谷P1135 奇怪的电梯——广搜
洛谷P1135 奇怪的电梯——广搜
72 0
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
|
Java
Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
Java锤子剪刀布大家应该都会玩“锤子剪刀布”的游戏: 现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
142 0