Skip to content

Latest commit

 

History

History
54 lines (46 loc) · 1.41 KB

File metadata and controls

54 lines (46 loc) · 1.41 KB

1004. Max Consecutive Ones III

Given a binary array nums and an integer k, return the maximum number of consecutive 1's in the array if you can flip at most k 0's.

Example 1:

Input: nums = [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: nums = [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.

Constraints:

  • 1 <= nums.length <= 105
  • nums[i] is either 0 or 1.
  • 0 <= k <= nums.length

Solutions (Rust)

1. Solution

impl Solution {
    pub fn longest_ones(nums: Vec<i32>, k: i32) -> i32 {
        let mut l = 0;
        let mut r = 0;
        let mut count0 = 0;
        let mut ret = 0;

        while r < nums.len() {
            if nums[r] == 0 {
                count0 += 1;
                while count0 > k {
                    if nums[l] == 0 {
                        count0 -= 1;
                    }
                    l += 1;
                }
            }

            r += 1;
            ret = ret.max(r - l);
        }

        ret as i32
    }
}