914. X of a Kind in a Deck of Cards
阿新 • • 發佈:2018-12-12
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
public boolean hasGroupsSizeX(int[] deck) { if (deck.length <= 1) return false; Hashtable<Integer, Integer> valueSizeTable = new Hashtable<>(deck.length); for (int each : deck) { Integer size = valueSizeTable.get(each); if (size == null) size = 0; valueSizeTable.put(each, ++size); } Collection<Integer> values = valueSizeTable.values(); int min = Integer.MAX_VALUE; for (int each : values) { if (each < min) min = each; } outer: for (int i = 2; i <= min; i++) { boolean b1 = true; for (int v : values) { b1 &= v % i == 0; if (!b1) continue outer; } if (b1) return true; } return false; }