Friday, September 4, 2020

LeetCode [846] Hand of Straights

 846. Hand of Straights

Medium

Alice has a hand of cards, given as an array of integers.

Now she wants to rearrange the cards into groups so that each group is size W, and consists of W consecutive cards.

Return true if and only if she can.

 

    Example 1:

    Input: hand = [1,2,3,6,2,3,4,7,8], W = 3
    Output: true
    Explanation: Alice's hand can be rearranged as [1,2,3],[2,3,4],[6,7,8].

    Example 2:

    Input: hand = [1,2,3,4,5], W = 4
    Output: false
    Explanation: Alice's hand can't be rearranged into groups of 4.
    

     

    Constraints:

    • 1 <= hand.length <= 10000
    • 0 <= hand[i] <= 10^9
    • 1 <= W <= hand.length
    Note: This question is the same as 1296: https://leetcode.com/problems/divide-array-in-sets-of-k-consecutive-numbers/
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    class Solution {
        public boolean isNStraightHand(int[] hand, int W) {
            Map<Integer, Integer> count = new TreeMap<>();
            for(int i : hand) count.put(i, count.getOrDefault(i, 0)+1);
            for(int k : count.keySet()){
                if(count.get(k)==0) continue;
                int last = k + W-1;
                for(int j=last; j>=k; --j){
                    if(count.getOrDefault(j, 0) < count.get(k)) return false;
                    count.put(j, count.get(j)-count.get(k));
                }
            }
            return true;
        }
    }
    

    No comments:

    Post a Comment