AlgoInsight

DSA problem

Fruit Into Baskets

MediumSliding Window - Dynamic SizePattern: Variable-Size Sliding Windowtop600GoogleAmazonMicrosoftApple

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 i-th tree produces.

You want to collect as much fruit as possible, but you are limited by 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. In other words, this is asking for the length of the longest contiguous subarray that contains at most two distinct values.

The natural approach is a variable-size sliding window. Expand the window to the right one tree at a time, tracking the count of each fruit type inside the window with a hash map. Whenever the window holds more than two distinct fruit types, shrink it from the left until only two types remain. The answer is the largest window width seen during this process.

Examples

Example 1
Input: fruits = [1,2,1]
Output: 3
Explanation: We can pick from all 3 trees because the row contains only two fruit types (1 and 2), which fit in our two baskets.
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 could only pick from trees [0,1] before encountering a third fruit type.
Example 3
Input: fruits = [1,2,3,2,2]
Output: 4
Explanation: We can pick from trees [2,3,2,2]. Starting at the first tree would only allow picking from trees [1,2].

Constraints

3 hints and a full solution walkthrough with step-by-step visualizations are available in the practice editor.

sliding-windowhash-maparraytwo-pointers

Browse all DSA problems