Maximum Fruits Harvested After at Most K Steps LeetCode solution in JavaScript

1
/**
2
* @param {number[][]} fruits
3
* @param {number} startPos
4
* @param {number} k
5
* @return {number}
6
*/
7
var maxTotalFruits = function (fruits, startPos, k) {
8
let n = Math.max(fruits[fruits.length - 1][0], startPos) + 1;
9
let numFruits = new Array(n).fill(0);
10
let sums = new Array(n).fill(0);
11
for (let obj of fruits) {
12
let [pos, num] = obj;
13
numFruits[pos] = num;
14
}
15
sums[startPos] = numFruits[startPos];
16
for (let i = startPos + 1; i < n && i <= startPos + k; i++) {
17
sums[i] = sums[i - 1] + numFruits[i];
18
}
19
for (let i = startPos - 1; i >= 0 && i >= startPos - k; i--) {
20
sums[i] = sums[i + 1] + numFruits[i];
21
}
22
//console.log(sums);
23
let output = 0;
24
for (let leftMoves = k; leftMoves >= 0; leftMoves--) {
25
let rightMoves = Math.max(k - 2 * leftMoves, 0);
26
let leftPos = Math.max(0, startPos - leftMoves);
27
let rightPos = Math.min(n - 1, startPos + rightMoves);
28
let count = sums[leftPos] + sums[rightPos] - sums[startPos];
29
output = Math.max(output, count);
30
}
31
for (let rightMoves = k; rightMoves >= 0; rightMoves--) {
32
let leftMoves = Math.max(k - 2 * rightMoves, 0);
33
let leftPos = Math.max(0, startPos - leftMoves);
34
let rightPos = Math.min(n - 1, startPos + rightMoves);
35
let count = sums[leftPos] + sums[rightPos] - sums[startPos];
36
output = Math.max(output, count);
37
}
38
return output;
39
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0