C ++中的Max Conecutive Ones III
假设我们有一个0和1的数组A,我们最多可以将K值更新为0到1。我们必须找到仅包含1的最长(连续)子数组的长度。因此,如果A=[1,1,1,0,0,0,1,1,1,1,1,0]且k=2,则输出将为6,因此如果我们翻转20,则数组可以为像[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