-
Notifications
You must be signed in to change notification settings - Fork 23
/
Copy path0904-fruit-into-baskets.js
46 lines (41 loc) · 1.47 KB
/
0904-fruit-into-baskets.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
* 904. Fruit Into Baskets
* https://leetcode.com/problems/fruit-into-baskets/
* Difficulty: Medium
*
* You are visiting a farm that has a single row of fruit trees arranged from left to right.
* The trees are represented by an integer array fruits where fruits[i] is the type of fruit
* the ith tree produces.
*
* You want to collect as much fruit as possible. However, the owner has some strict rules
* that you must follow:
* - You only have two baskets, and each basket can only hold a single type of fruit. There
* is no limit on the amount of fruit each basket can hold.
* - Starting from any tree of your choice, you must pick exactly one fruit from every tree
* (including the start tree) while moving to the right. The picked fruits must fit in one
* of your baskets.
* - Once you reach a tree with fruit that cannot fit in your baskets, you must stop.
*
* Given the integer array fruits, return the maximum number of fruits you can pick.
*/
/**
* @param {number[]} fruits
* @return {number}
*/
var totalFruit = function(fruits) {
const map = new Map();
let result = 0;
let start = 0;
for (let end = 0; end < fruits.length; end++) {
map.set(fruits[end], (map.get(fruits[end]) || 0) + 1);
while (map.size > 2) {
map.set(fruits[start], map.get(fruits[start]) - 1);
if (map.get(fruits[start]) === 0) {
map.delete(fruits[start]);
}
start++;
}
result = Math.max(result, end - start + 1);
}
return result;
};