LeetCode1日1つの質問1004。連続する1の最大数III

1004.連続する1の最大数III

複数の0と1で構成される配列Aが与えられた場合、最大K個の値を0から1に変更できます。

1のみを含む最長の(連続した)サブ配列の長さを返します。

例1:

输入:A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
输出:6
解释: 
[1,1,1,0,0,1,1,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 6

例2:

输入:A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
输出:10
解释:
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
粗体数字从 0 翻转到 1,最长的子数组长度为 10

促す:

  • 1 <= A.length <= 20000
  • 0 <= K <= A.length
  • A [i]は0または1です

方法1:スライディングウィンドウ

問題解決のアイデア

  • ダブルポインタはまだ[left, right)スライディングウィンドウシミュレーション
  • right遭遇したとき、右へのポインタを横切る時間を、演算結果の値移動次へのポインタをK0ret = max(ret, right - left)left0

参照コード

public int longestOnes(int[] A, int K) {
    
    
    int n = A.length;
    int ret = 0;
    int left = 0, right = 0, count = 0;
    while (right < n) {
    
    
        if (A[right] == 0) {
    
    
            if (count < K) {
    
    
                count++;
            } else {
    
    
                ret = Math.max(ret, right - left);
                do {
    
    
                    left++;
                } while (A[left - 1] == 1);
            }
        }
        right++;
    }
    return Math.max(ret, right - left);
}

の結果
ここに画像の説明を挿入

  • 時間計算量:O(n)
  • スペースの複雑さ:O(1)

おすすめ

転載: blog.csdn.net/qq_27007509/article/details/113858813