服务器php网站打不开,网络营销推广的主要形式为,中小企业网站建设开题报告,网站建设权利义务【LetMeFly】2511.最多可以摧毁的敌人城堡数目
力扣题目链接#xff1a;https://leetcode.cn/problems/maximum-enemy-forts-that-can-be-captured/
给你一个长度为 n #xff0c;下标从 0 开始的整数数组 forts #xff0c;表示一些城堡。forts[i] 可以是 -1 #xff0c…【LetMeFly】2511.最多可以摧毁的敌人城堡数目
力扣题目链接https://leetcode.cn/problems/maximum-enemy-forts-that-can-be-captured/
给你一个长度为 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
方法一遍历
这道题说白了就是问你1和-1之间最大的连续0的个数。
因此我们只需要使用一个变量last来记录上一个非0数是1还是-1再使用一个变量cnt来记录当前连续0的个数。
接着遍历地图数组
如果当前元素非零 就看是否为 “1遇到-1或-1遇到1”如果是则更新答案最大值更新cnt和last 否则当前元素为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
class Solution {
public:int captureForts(vectorint 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 { // 0cnt;}}return ans;}
};Python
# from typing import Listclass Solution:def captureForts(self, forts: List[int]) - int:ans 0last, cnt 2, 0for fort in forts:if fort:if fort ! last and last ! 2:ans max(ans, cnt)cnt 0last fortelse:cnt 1return ans同步发文于CSDN原创不易转载经作者同意后请附上原文链接哦~ Tisfyhttps://letmefly.blog.csdn.net/article/details/132634912