1. 程式人生 > >LeetCode - X of a Kind in a Deck of Cards

LeetCode - X of a Kind in a Deck of Cards

In a deck of cards, each card has an integer written on it.

Return true if and only if you can choose X >= 2 such that it is possible to split the entire deck into 1 or more groups of cards, where:

Each group has exactly X cards.
All the cards in each group have the same integer.
 

Example 1:

Input: [
1,2,3,4,4,3,2,1] Output: true Explanation: Possible partition [1,1],[2,2],[3,3],[4,4] Example 2: Input: [1,1,1,2,2,2,3,3] Output: false Explanation: No possible partition. Example 3: Input: [1] Output: false Explanation: No possible partition. Example 4: Input: [1,1] Output: true Explanation: Possible partition [
1,1] Example 5: Input: [1,1,2,2,2,2] Output: true Explanation: Possible partition [1,1],[2,2],[2,2] Note: 1 <= deck.length <= 10000 0 <= deck[i] < 10000

這道題仔細分析之後會得到X 一定得能被deck.length整除,也一定得被每個元素出現的次數整除,才能return true

class Solution {
    public boolean hasGroupsSizeX(int[] deck) {
        
if(deck == null || deck.length < 2){ return false; } int min = Integer.MAX_VALUE; Map<Integer, Integer> map = new HashMap<>(); for(int num : deck){ map.put(num, map.getOrDefault(num,0)+1); } for(int x = 2 ; x<=deck.length; x++){ if(deck.length % x != 0){ continue; } int count = 0; for(int key : map.keySet()){ count++; if(map.get(key) % x != 0){ break; } if(count == map.size()){ return true; } } } return false; } }