LeetCode 1004. Max Consecutive Ones III Max Consecutive Ones II

原题链接在这里:https://leetcode.com/problems/max-consecutive-ones-iii/

题目:

Given an array A of 0s and 1s, we may change up to K values from 0 to 1.

Return the length of the longest (contiguous) subarray that contains only 1s. 

Example 1:

Input: A = [1,1,1,0,0,0,1,1,1,1,0], K = 2
Output: 6
Explanation: 
[1,1,1,0,0,1,1,1,1,1,1]
Bolded numbers were flipped from 0 to 1.  The longest subarray is underlined.

Example 2:

Input: A = [0,0,1,1,0,0,1,1,1,0,1,1,0,0,0,1,1,1,1], K = 3
Output: 10
Explanation: 
[0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1]
Bolded numbers were flipped from 0 to 1.  The longest subarray is underlined.

Note:

  1. 1 <= A.length <= 20000
  2. 0 <= K <= A.length
  3. A[i] is 0 or 1 

题解:

Same idea as Max Consecutive Ones II.

Solution is easy to extend from 1 to K.

Time Complexity: O(n). n = A.length.

Space: O(1).

AC Java:

 1 class Solution {
 2     public int longestOnes(int[] A, int K) {
 3         if(A == null || A.length == 0){
 4             return 0;
 5         }
 6         
 7         int count = 0;
 8         int walker = 0;
 9         int runner = 0;
10         int res = 0;
11         while(runner < A.length){
12             if(A[runner++] != 1){
13                 count++;
14             }
15             
16             while(count > K){
17                 if(A[walker++] != 1){
18                     count--;
19                 }
20             }
21             
22             res = Math.max(res, runner-walker);
23         }
24         
25         return res;
26     }
27 }

猜你喜欢

转载自www.cnblogs.com/Dylan-Java-NYC/p/11399145.html