Flip String to Monotone Increasing LeetCode solution in JavaScript

1
function getPrefixSumArray(s) {
2
const prefixSumOfOnes = Array(s.length).fill(0);
3

4
let currentSum = 0;
5
for (let x = 0; x < s.length; x++) {
6
if (s[x] === "1") currentSum++;
7

8
prefixSumOfOnes[x] = currentSum;
9
}
10

11
return prefixSumOfOnes;
12
}
13

14
var minFlipsMonoIncr = function (s) {
15
const prefixSumOfOnes = getPrefixSumArray(s);
16

17
let answer = prefixSumOfOnes[s.length - 1]; // Case where we want to change to '0000'
18

19
for (let x = 0; x < s.length; x++) {
20
const sizeOfRightHandSide = s.length - x;
21
let numChangesRequired = null;
22

23
if (x === 0) {
24
// Case where we want to change to '1111'
25
const numOfOnesToChangeToZero = 0;
26

27
const numOfOnesOnRightHandSide = prefixSumOfOnes[s.length - 1];
28
const numOfZerosToChangeToOne =
29
sizeOfRightHandSide - numOfOnesOnRightHandSide;
30

31
numChangesRequired = numOfOnesToChangeToZero + numOfZerosToChangeToOne;
32
} else {
33
// Cases like '0111', '0011', '0001'
34
const numOfOnesToChangeToZero = prefixSumOfOnes[x - 1];
35

36
const numOfOnesOnRightHandSide =
37
prefixSumOfOnes[s.length - 1] - prefixSumOfOnes[x - 1];
38
const numOfZerosToChangeToOne =
39
sizeOfRightHandSide - numOfOnesOnRightHandSide;
40

41
numChangesRequired = numOfOnesToChangeToZero + numOfZerosToChangeToOne;
42
}
43

44
answer = Math.min(answer, numChangesRequired);
45
}
46

47
return answer;
48
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0