给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:
每组都有 X 张牌。
组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。
//卡牌分组 public boolean hasGroupsSizeX(int[] deck) { //生成统计Map Map<Integer,Integer> m = new HashMap(); for(int i = 0; i < deck.length; i ++){ if(!m.containsKey(deck[i])){ m.put(deck[i],1); }else { int tmp = m.get(deck[i]) + 1; m.put(deck[i],tmp); } } //1.条件:每一个value的值必须大于1 Iterator<Integer> it = m.keySet().iterator(); while (it.hasNext()){ Integer value = m.get(it.next()); if (value < 2){ return false; } } //2.条件:最大公约数大于1 Collection<Integer> values = m.values(); Iterator<Integer> it_values = values.iterator(); int min = Integer.MAX_VALUE; while (it_values.hasNext()){ int tmp = it_values.next(); if (tmp < min){ min = tmp; } } int max_divid = 1; //初始化迭代器 for (int i = min; i > 1; i --){ boolean flag = true; it_values = values.iterator(); while (it_values.hasNext()){ if (it_values.next() % i == 0){ continue; }else { flag = false; break; } } if (flag == true){ max_divid = i; break; } } if (max_divid == 1){ return false; }else { return true; } }