假设我们有一个0和1的数组A,我们最多可以将K值更新为0到1。我们必须找到仅包含1的最长(连续)子数组的长度。因此,如果A = [1,1,1,0,0,0,1,1,1,1,1,0]且k = 2,则输出将为6,因此如果我们翻转2 0,则数组可以为像[1,1,1,0,0,1,1,1,1,1,1,1]一样,最长序列的长度为1s为6。
为了解决这个问题,我们将遵循以下步骤-
设置ans:= 0,j:= 0和n:=数组大小
对于i,范围为0至n – 1
如果A [j] = 0,则将k增加1
将j增加1
如果A [i]为0,则将k减1
当j <= i并且k <0
ans:= i – j + 1,ans的最大值
返回ans
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int longestOnes(vector<int>& A, int k) { int ans = 0; int j = 0; int n = A.size(); for(int i = 0; i < n; i++){ if(A[i] == 0) k--; while(j <= i && k <0){ if(A[j] == 0){ k++; } j++; } ans = max(i - j + 1, ans); } return ans; } }; main(){ vector<int> v = {1,1,1,0,0,0,1,1,1,1,0}; Solution ob; cout <<(ob.longestOnes(v, 3)); }
[1,1,1,0,0,0,1,1,1,1,0] 3
输出结果
10