914. X of a Kind in a Deck of Cards

2023-12-21 16:38
文章标签 cards kind deck 914

本文主要是介绍914. X of a Kind in a Deck of Cards,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

914. 卡牌分组

给定一副牌,每张牌上都写着一个整数。

此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:

  • 每组都有 X 张牌。
  • 组内所有的牌上都写着相同的整数。

仅当你可选的 X >= 2 时返回 true

 

示例 1:

输入:[1,2,3,4,4,3,2,1]
输出:true
解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]

示例 2:

输入:[1,1,1,2,2,2,3,3]
输出:false
解释:没有满足要求的分组。

示例 3:

输入:[1]
输出:false
解释:没有满足要求的分组。

示例 4:

输入:[1,1]
输出:true
解释:可行的分组是 [1,1]

示例 5:

输入:[1,1,2,2,2,2]
输出:true
解释:可行的分组是 [1,1],[2,2],[2,2]


提示:

  1. 1 <= deck.length <= 10000
  2. 0 <= deck[i] < 10000

 

解法一

//时间复杂度O(n), 空间复杂度O(n)
class Solution {
public:int maxCommonFactor(int a, int b) {//a >= bint mod = -1;while(mod != 0) {mod = a % b;if(mod == 0) return b;a = b;b = mod;}return 0;}bool hasGroupsSizeX(vector<int>& deck) {unordered_map<int, int> um;for(int num : deck) um[num]++;//计数int minCount = INT_MAX;for(auto p : um) minCount = min(minCount, p.second);//求最小计数if(minCount < 2) return false;for(auto p : um) {if(maxCommonFactor(p.second, minCount) < 2) return false;}return true;}
};

思路:

  1. 使用一个map对每个数字计数;
  2. 找出map中计数最小的计数值minCount;
  3. 遍历其它所有数字的计数值,如果有任何一个计数值与minCount的最大公因数小于2,就返回false。否则返回true。
  4. 求最大公因数使用了辗转相除法(条件a >= b)。
2019/08/5 00:04

这篇关于914. X of a Kind in a Deck of Cards的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520732

相关文章

题解:P3569 [POI2014] KAR-Cards

题意 有 n n n 个元素,第 i i i 个元素有两个权值 a i a_i ai​ 和 b i b_i bi​;有 m m m 次操作,每次操作会交换两个元素的位置,且都需要回答:是否存在一种方案,使得每个元素各选择一个权值后,组成的序列从左到右单调不降。 解法 完全可以把交换操作看作两次单点修改,每次只需要考虑一个元素的变化对答案的影响即可。对于一个区间中的元素,显然开

Redis:WRONGTYPE Operation against a key holding the wrong kind of value

1.错误信息 redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value 2.分析 当前程序中key的操作类型,并不与redis库中存在的key的类型相匹配。举例  第一次保存key,将其设置为key-value

[LightOJ 1364] Expected Cards (高维期望DP)

LightOJ - 1364 一副扑克牌,不断地从中抽牌 要求四种花色都至少要有给定的张数 其中如果抽到了王牌,可以将其变为任意花色 求满足条件时,抽出的期望张数 刚开始想错了,两张王牌并非在一开始就给定了 而是在游戏中可以视当前情况选择着变的 这两种方式是不一样的 由于牌数其实并不会很多, 复杂度乘一乘发现才 107 10^7级别的,所以直接暴力DP 将两张王牌当

Steam Deck OLED WLAN稳定性问题workaround方案

问题描述: Deck OLED在进行游戏或者大数据量跑流时,进入低功耗模式后,WLAN的速率会不稳定或者发生Crash。 Steps for reproducing: Stream game or remote play gameWait a minute or two, until stuttering occursClient crashesRestart deck or disco/r

kubernetes学习笔记(6)- 使用 kind 快速搭建集群

概述 如果你因一些原因(囊中羞涩)无法完整的体验一个k8s集群, 你应该尝试一下 kind。它的优势: 快速简单的创建 k8s 集群可直接创建多节点集群(支持 control-plane 高可用)可选择 k8s 版本安装支持 windows/linux/macos 三平台 它仅仅需要你: 装好 docker装好 golang(>= 1.11)装好 kubectl国内需要配置镜像(骑墙应该是

HDU 1535 Invitation Cards 2次Dijkstra来回最短路

题目来源:HDU 1535 Invitation Cards 题意:从1派学生到2-n这n-1个点  求去并且回来的最短路 就是1到各点的最短路之和和各点到1的最短路之和 给的是有向图 思路:对于1到各个点的最短路直接Dijkstra求出无压力 然后各个点到1的最短路可以反向建图后再求一次从1到各个点的最短路 对于很多点到一个点的情况可以考虑反向建图 转变成单源最短路 #include <

图形和插图软件Canvas X Pro 20 Build 914

Canvas X Pro是一款功能强大、用途广泛的Windows软件,旨在处理技术图形和可视化,该程序结合了创建矢量和光栅图形的工具,这使其成为需要创建高质量技术插图和演示文稿的工程师、设计师、科学家和其他专业人士的理想选择。 Canvas X Pro的主要功能之一是支持处理大型和复杂的文件。该程序能够以高分辨率处理多层文档,同时提供高性能和稳定性。这对于处理详细图纸、方案和地图的用户尤

Codefores 398A Cards(贪心+暴力)

题目链接:Codefores 398A Cards 题目大意:给出a和b,表示说有a个“o”的卡和b个“x”的卡,将这a+b个卡片排成一个序列,每连续的k个相同的卡片为一个数,表示k^2,如果是o,则是+k^2,否则-k^2。要求找到一个序列使得最后的结果尽量大。 解题思路:一开始一直想用贪心的思想直接构造出来,后来和小伙伴一人想了一种构造方法,但是又互相推翻了。。。。不过很快就想

hdu 4610 Cards(暴力+miller-rabin)

题目链接:hdu 4610 Cards 解题思路 用素数筛选法先预处理出每个数的因子个数,因子和。因子个数肯定小于1e6,可以根据预处理的素数表直接判断是否为素数,但是因子和可能到达4百多万,所以直接用miller-rabin直接判素数。 判断因子积是否是平方和的部分,考虑因子个数,如果因子个数为奇数(即该数为平方数),则sqrt(i)必须是平方数才行。如果因子个数为偶数,则cnt/2为偶数

矩阵十题【四】 HDU 3306 Another kind of Fibonacci

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3306 题目大意:A(0) = 1 , A(1) = 1 , A(N) = X * A(N - 1) + Y * A(N - 2) (N >= 2);给定三个值N,X,Y求S(N):S(N) = A(0)^2 +A(1)^2+……+A(n)^2。  学了这几题,还是不太很懂,后来看题解,渐渐也是懂了