题目地址:
https://leetcode.com/problems/max-consecutive-ones-ii/description/
给定一个长 n n n的 01 01 01数组 A A A,允许将任意一位变为 1 1 1,问可以得到的最长 1 1 1子数组的长度。
双指针,对 A [ i ] A[i] A[i]求最左边的 j j j使得 A [ j : i ] A[j:i] A[j:i]最多含 1 1 1个 0 0 0,则 j j j关于 i i i单调。代码如下:
class Solution {
public:
int findMaxConsecutiveOnes(vector<int>& a) {
int cnt[2] = {0}, res = 0;
for (int i = 0, j = 0; i < a.size(); i++) {
cnt[a[i]]++;
while (cnt[0] > 1) cnt[a[j++]]--;
res = max(res, i - j + 1);
}
return res;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。