mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00
feat: add maxConsecutiveOnesIII implementation (#1286)
This commit is contained in:
32
Dynamic-Programming/Sliding-Window/MaxConsecutiveOnesIII.js
Normal file
32
Dynamic-Programming/Sliding-Window/MaxConsecutiveOnesIII.js
Normal file
@ -0,0 +1,32 @@
|
||||
/**
|
||||
* @function maxConsecutiveOnesIII
|
||||
* @description 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.
|
||||
* @param {number[]} nums
|
||||
* @param {number} k
|
||||
* @return {number}
|
||||
* @see [Leetcode link](https://leetcode.com/problems/max-consecutive-ones-iii/)
|
||||
*/
|
||||
export const maxConsecutiveOnesIII = (nums, k) => {
|
||||
if (!nums.length) return 0
|
||||
|
||||
let result = 0
|
||||
|
||||
for (
|
||||
let slowPointer = 0, fastPointer = 0;
|
||||
fastPointer < nums.length;
|
||||
fastPointer++
|
||||
) {
|
||||
if (nums[fastPointer] === 0) {
|
||||
k--
|
||||
}
|
||||
|
||||
while (k < 0) {
|
||||
if (slowPointer === 0) {
|
||||
k++
|
||||
}
|
||||
slowPointer++
|
||||
}
|
||||
result = Math.max(result, fastPointer - slowPointer + 1)
|
||||
}
|
||||
return result
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
import { maxConsecutiveOnesIII } from '../MaxConsecutiveOnesIII'
|
||||
|
||||
describe('maxConsecutiveOnesIIIIII', () => {
|
||||
it('expects to return 0 when argument is empty array', () => {
|
||||
expect(maxConsecutiveOnesIII([], 3)).toBe(0)
|
||||
})
|
||||
|
||||
it('expects to return 6', () => {
|
||||
expect(maxConsecutiveOnesIII([1, 1, 0, 1, 1, 1], 1)).toBe(6)
|
||||
})
|
||||
|
||||
it('expects to return 8', () => {
|
||||
expect(maxConsecutiveOnesIII([1, 0, 1, 1, 1, 1, 0, 1], 2)).toBe(8)
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user