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

相关文章

poj 1511 Invitation Cards(spfa最短路)

题意是给你点与点之间的距离,求来回到点1的最短路中的边权和。 因为边很大,不能用原来的dijkstra什么的,所以用spfa来做。并且注意要用long long int 来存储。 稍微改了一下学长的模板。 stack stl 实现代码: #include<stdio.h>#include<stack>using namespace std;const int M

【HDU】4876 ZCC loves cards 暴力

传送门:【HDU】4876 ZCC loves cards 题目分析: 这题无力吐嘈。。。。能想到的优化都用上吧。。。 代码如下: #include <cstdio>#include <cstring>#include <algorithm>using namespace std ;#define REP( i , n ) for ( int i =

poj 1721 CARDS(置换)

http://poj.org/problem?id=1721 大致题意:原始序列通过洗牌机洗牌s次后变为当前序列,已知当前序列,求原始序列。 在置换群快速幂运算 研究与探讨中最后有详解,有两种解法,一种是求出置换的长度a(即一副牌洗a次后变回原来的位置),现已知原始序列置换s次变为当前序列,那么当前序列再置换a-s次就是原始序列了。求a就是直接模拟每个置换的过程,直到某序列与当前序

POJ 3111 K Best NYOJ 914 (二分+ 贪心,最大化平均值)

链接:NYOJ:click here, POJ:click here 题意:(最大化平均值,挑战编程P143) 有n个物品的重量和价值分别是w[i]和v[i],从中选出K个物品使得单位重量的价值最大。(1<=k<=n<=10^41<=w[i],v[i]<=10^6) 一般想到的是按单位价值对物品排序,然后贪心选取,但是这个方法是错误的,比如对nyoj的例题来说,从大到小地进行选取,输入的

题解: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 <