Monday, November 12, 2018

846. Hand of Straights

846Hand of Straights
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.

    Note:
    1. 1 <= hand.length <= 10000
    2. 0 <= hand[i] <= 10^9
    3. 1 <= W <= hand.length
    ------------------------------
    暴解
    class Solution {
        public boolean isNStraightHand(int[] hand, int W) {
            int n = hand.length;
            Arrays.sort(hand);
            TreeMap<Integer, Integer> tree = new TreeMap<>();
            
            for (int i : hand) {
                tree.put(i, tree.getOrDefault(i, 0) + 1);
            }
            
            while (!tree.isEmpty()) {
                int count = 0, i = tree.firstKey();
                while (count < W) {
                    if (!tree.containsKey(i)) return false;
                    tree.put(i, tree.get(i) - 1);
                    if (tree.get(i) == 0) tree.remove(i);
                    i++;
                    count++;
                }
            }
            
            return true;
        }
    }
    

    No comments:

    Post a Comment