Minimum Consecutive Cards to Pick Up

Overview

Medium 1 solution

Categories

ArrayHash TableSliding Window
package array.iterative;

import java.util.stream.IntStream;

public class MinimumConsecutiveCardsToPickUp {

    public int minimumCardPickup(int[] cards) {

        int minMoves  = Integer.MAX_VALUE;
        int maxCard   = IntStream.of(cards).max().orElse(0);
        int[] counter = new int[maxCard + 1];

        for (int leftPtr = 0, rightPtr = 0; rightPtr < cards.length; rightPtr++) {
            counter[cards[rightPtr]] += 1;

            while (counter[cards[rightPtr]] == 2) {
                minMoves = Math.min(minMoves, rightPtr - leftPtr + 1);
                counter[cards[leftPtr]] -= 1;
                leftPtr++;
            }
        }

        return minMoves == Integer.MAX_VALUE ? -1 : minMoves;
    }

}