3587卡牌分组
Posted 小雷FansUnion
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3587卡牌分组相关的知识,希望对你有一定的参考价值。
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:
每组都有 X 张牌。
组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。
示例 1:
输入:deck = [1,2,3,4,4,3,2,1]
输出:true
解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]
示例 2:
输入:deck = [1,1,1,2,2,2,3,3]
输出:false
解释:没有满足要求的分组。
提示:
1 <= deck.length <= 104
0 <= deck[i] < 104
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/x-of-a-kind-in-a-deck-of-cards
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package cn.fansunion.leecode.intelligence;
import java.util.Map;
import java.util.Map.Entry;
import cn.fansunion.leecode.kit.Kit;
/**
* 914. 卡牌分组 <br/>
* 给定一副牌,每张牌上都写着一个整数。 <br/>
*
* 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: <br/>
*
* 每组都有 X 张牌。 组内所有的牌上都写着相同的整数。 <br/>
* 仅当你可选的 X >= 2 时返回 true。 <br/>
*
* 来源:力扣(LeetCode) 链接:力扣 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*
* @author wen.lei@brgroup.com
*
* 2022-3-9
*/
public class XOfAKindInADeckOfCards
/* 示例 1:
输入:deck = [1,2,3,4,4,3,2,1]
输出:true
解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]
示例 2:
输入:deck = [1,1,1,2,2,2,3,3]
输出:false
解释:没有满足要求的分组。
提示:
1 <= deck.length <= 104
0 <= deck[i] < 104*/
/**
* 题目的意思:统计各个数出现的次数,然后求次数之间是否存在公约数
*
*
*/
public boolean hasGroupsSizeX(int[] deck)
Map<Integer, Integer> countMap = Kit.countMap(deck);
int prevSize = 0;
for (Map.Entry<Integer, Integer> entry : countMap.entrySet())
final Integer currentSize = entry.getValue();
if (currentSize.equals(1))
return false;
if (prevSize == 0)
prevSize = currentSize;
else
int gcd = Kit.gcd(prevSize, currentSize);
if (gcd < 2)
return false;
else
prevSize = currentSize;
return true;
/**
* 解题思路:计算每个数字出现的次数;如果数字出现的次数=1,false;每个数字次数,都相等,返回true
* <br/> 与题目意思不符:[1,1,2,2,2,2],可以分成[1,1],[2,2],[2,2]
*
* @param deck
* @return
*/
public boolean hasGroupsSizeXError(int[] deck)
Map<Integer, Integer> countMap = Kit.countMap(deck);
int prevSize = 0;
for (Entry<Integer, Integer> entry : countMap.entrySet())
final Integer currentSize = entry.getValue();
if (currentSize.equals(1))
return false;
if (prevSize == 0)
prevSize = currentSize;
else
if (prevSize != currentSize)
return false;
else
prevSize = currentSize;
return true;
package test.leecode.intelligence;
import org.junit.Assert;
import org.junit.Test;
import cn.fansunion.leecode.intelligence.XOfAKindInADeckOfCards;
/**
* @author wen.lei@brgroup.com
*
* 2022-2-25
*/
public class XOfAKindInADeckOfCardsTest
@Test
public void test()
XOfAKindInADeckOfCards test = new XOfAKindInADeckOfCards();
Assert.assertTrue(test.hasGroupsSizeX(new int[] 1,1,2,2,2,2,3,3,3,3));
Assert.assertTrue(test.hasGroupsSizeX(new int[] 1,1,2,2,2,2));
Assert.assertFalse(test.hasGroupsSizeX(new int[] 1,2,3,4));
Assert.assertTrue(test.hasGroupsSizeX(new int[] 1,2,3,4,4,3,2,1,5,6,6,5));
Assert.assertTrue(test.hasGroupsSizeX(new int[] 1,2,3,4,4,3,2,1));
Assert.assertFalse(test.hasGroupsSizeX(new int[] 1,1,1,2,2,2,3,3));
Assert.assertFalse(test.hasGroupsSizeX(new int[] 1,2,3,4,4));
Assert.assertFalse(test.hasGroupsSizeX(new int[] 1,2,2));
@Test
public void testError()
XOfAKindInADeckOfCards test = new XOfAKindInADeckOfCards();
Assert.assertFalse(test.hasGroupsSizeXError(new int[] 1,2,3,4));
Assert.assertTrue(test.hasGroupsSizeXError(new int[] 1,2,3,4,4,3,2,1,5,6,6,5));
Assert.assertTrue(test.hasGroupsSizeXError(new int[] 1,2,3,4,4,3,2,1));
Assert.assertFalse(test.hasGroupsSizeXError(new int[] 1,1,1,2,2,2,3,3));
Assert.assertFalse(test.hasGroupsSizeXError(new int[] 1,2,3,4,4));
Assert.assertFalse(test.hasGroupsSizeXError(new int[] 1,2,2));
————————————————
版权声明:本文为CSDN博主「huoyingfans」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huoyingfans/article/details/123750798
以上是关于3587卡牌分组的主要内容,如果未能解决你的问题,请参考以下文章