Appearance
2511. 最多可以摧毁的敌人城堡数目
给你一个长度为 n ,下标从 0 开始的整数数组 forts ,表示一些城堡。forts[i] 可以是 - 1 ,0 或者 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
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-enemy-forts-that-can-be-captured
javascript
/**
* @param {number[]} forts
* @return {number}
*/
var captureForts = function (forts) {
let prev = null,
count = 0,
max = 0
for (let i = 0; i < forts.length; i++) {
const item = forts[i]
if (item === 0) {
if (prev) {
count++
}
} else {
if (prev) {
if (prev === item) {
count = 0
} else {
prev = item
max = Math.max(max, count)
count = 0
}
} else {
prev = item
}
}
}
return max
}
console.log(captureForts([1, 0, 0, -1, 0, 0, 0, 0, 1]) === 4)
console.log(captureForts([1, 0, 0, -1, 0, 1, 0, 0, 1]) === 2)
console.log(captureForts([0, 0, 1, -1]) === 0)