Fruit Into Baskets

Tags : leetcode, array, hash, slidingwindow, cpp, 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:

Given the integer array fruits, return the maximum number of fruits you can pick.

Examples #

Example 1:

Input: fruits = [1,2,1]
Output: 3
Explanation: We can pick from all 3 trees.

Example 2:

Input: fruits = [0,1,2,2]
Output: 3
Explanation: We can pick from trees [1,2,2].
If we had started at the first tree, we would only pick from trees [0,1].

Example 3:

Input: fruits = [1,2,3,2,2]
Output: 4
Explanation: We can pick from trees [2,3,2,2].
If we had started at the first tree, we would only pick from trees [1,2].

Constraints #

Solutions #


class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        int res = 0, si = 0, ei = 0;
        unordered_map<int, int> m;
        while(ei < fruits.size()) {
            m[fruits[ei]]++;
            if(m.size() <= 2) {
                res = max(res, ei-si+1);
            }
            else {
                m[fruits[si]]--;
                if(m[fruits[si]] == 0) {
                    m.erase(fruits[si]);
                }
                si++;
            }
            ei++;
        }
        return res;
    }
};