Every day a leetcode
题目来源:2511. 最多可以摧毁的敌人城堡数目
解法1:模拟
遍历数组forts,每当遇到我们控制的城堡(forts[i] == 1),就:
- 向左遍历一次,计算从当前位置向左能摧毁的敌人城堡数目
- 向右遍历一次,计算从当前位置向右能摧毁的敌人城堡数目
每计算一次,就更新答案,遍历完成后就得到最多可以摧毁的敌人城堡数目。
代码:
/*
* @lc app=leetcode.cn id=2511 lang=cpp
*
* [2511] 最多可以摧毁的敌人城堡数目
*/
// @lc code=start
class Solution
{
public:
int captureForts(vector<int> &forts)
{
int n = forts.size();
int ans = 0;
for (int i = 0; i < n; i++)
{
if (forts[i] == 1)
{
// 向左遍历
int left = i - 1;
while (left >= 0 && forts[left] == 0)
left--;
if (left >= 0 && forts[left] == -1)
ans = max(ans, i - left - 1);
// 向右遍历
int right = i + 1;
while (right < n && forts[right] == 0)
right++;
if (right < n && forts[right] == -1)
ans = max(ans, right - i - 1);
}
}
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n),其中n是数组forts的长度。
空间复杂度:O(1)
解法2:
代码:
在这里插入代码片
结果:
复杂度分析:
时间复杂度:O()
空间复杂度:O()