Max Consecutive Ones

/**
 * @function maxConsecutiveOnes
 * @description Given a binary array nums, return the maximum number of consecutive 1's in the array.
 * @param {number[]} nums
 * @return {number}
 * @see [Leetcode link](https://leetcode.com/problems/max-consecutive-ones/)
 */
export const maxConsecutiveOnes = (nums) => {
  if (!nums.length) return 0

  let result = 0
  let k = 0

  for (
    let slowPointer = 0, fastPointer = 0;
    fastPointer < nums.length;
    fastPointer++
  ) {
    if (nums[fastPointer] === 0) k--

    while (k < 0) {
      if (nums[slowPointer] === 0) {
        k++
      }
      slowPointer++
    }
    result = Math.max(result, fastPointer - slowPointer + 1)
  }
  return result
}