题目地址:卡牌分组

题目描述:

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

此时,你需要选定一个数字 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 <= deck.length <= 10000
0 <= deck[i] < 10000

解题思路:

1.先遍历原数组,统计其中数字出现的次数,并找出最小值

2.以最小值为下标起始点遍历统计结果的数组,将其中有效的元素放入另外的数组中,并计算数组的实际长度,减少冗余,以提高计算速度。同时找出最少出现的次数

3.如果最少出现的次数为1,即某个数字只出现了一次,那么每组都有 X 张牌仅当你可选的 X >= 2 时返回 true条件不满足。返回false,程序结束。

4.计算最少出现的次数的因子,将所有不为1的因子存入数组yinzi中。

5.遍历精简过的数组,判断数组中的元素是否能被yinzi中的某个元素整除,并设置每个元素是否能被整除的标记(每次重置为false),能整就除将标记设为true;不能整除则将此yinzi中元素置为100000(因为分组时所有组至少有一个共同的因子,如果yinzi中的某个元素不能整除数字的次数,说明此元素不是所有组的公因子,设为100000后,这个因子就无效了,因为肯定不能整除。)。一个元素处理好后,判断标记是否为true,是则处理下一个元素;不是则返回false。

6.返回true。

代码:

class Solution {public boolean hasGroupsSizeX(int[] deck) {int[] tem = new int[10001];int[] ans = new int[10001];int min = 10000, len = deck.length;int min_sum = 10000;boolean flag = false;for(int i = 0; i < len;i++){if(deck[i] < min) min = deck[i];tem[deck[i]]++;}int chang = 0;for(int i = min; i < 10001;i++){if(tem[i] != 0){if(tem[i] < min_sum) min_sum = tem[i];ans[chang++] = tem[i];}}//某个数字只出现了一次,不满足条件    每组都有 X 张牌if(min_sum == 1) return false;//因子int[] yinzi = new int[min_sum];int yinzi_chang = 0;for(int i = 2; i <= min_sum; i++){if(min_sum % i == 0) yinzi[yinzi_chang++] += i;}for(int i = 0; i < chang;i++){flag = false;for(int j = 0; j < yinzi_chang; j++){if(ans[i] % yinzi[j] == 0){flag = true;}else{yinzi[j] = 100000;}}if(!flag) return false;}return true;}
}

力扣:914. 卡牌分组 题解(Java)相关推荐

  1. 力扣914.卡牌分组

    题目描述 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌.组内所有的牌上都写着相同的整数. 仅当你可选的 X ...

  2. Leetcode每日一题(914. 卡牌分组)

    914. 卡牌分组 题目: 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数 ...

  3. LeetCode 914. 卡牌分组

    914. 卡牌分组 思路:统计个数,然后求最小公约数 class Solution { public:bool hasGroupsSizeX(vector<int>& deck) ...

  4. js + leetcode刷题:No.914 卡牌分组

    思路:计数:求最大公约数,与2比较 题目: 卡牌分组 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内 ...

  5. 数据结构与算法之数组: Leetcode 914. 卡牌分组 (Typescript版)

    卡牌分组 https://leetcode.cn/problems/x-of-a-kind-in-a-deck-of-cards/ 描述 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 ...

  6. LeetCode 914. 卡牌分组(最大公约数)

    1. 题目 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 ...

  7. python【力扣LeetCode算法题库】914. 卡牌分组(reduce collections.Counter)

    给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...

  8. 【Leetcode】914. 卡牌分组

    文章目录 [题目] [题目分析] [代码实践] [题目] 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当 ...

  9. 2021-12-8 Leetcode 914.卡牌分组

    class Solution {public:bool hasGroupsSizeX(vector<int>& deck) {map<int,int> hash_map ...

最新文章

  1. Kafka配置SASL/PLAIN认证
  2. 改变div php,js改变div样式
  3. 线程池框架_Java并发——Executor框架详解(Executor框架结构与框架成员)
  4. P2782 友好城市
  5. VMware Workstation Pro 无法在Windows 上运行的 解决办法
  6. 《需求规格说明书》业务描述活动图
  7. rpm安装mysql
  8. 宽带密码忘了怎么办?ADSL宽带账号密码找回教学
  9. LINGO编程简介与实例
  10. 员工自动离职可以申请经济补偿吗
  11. Android个人简历自我评价,Android开发工程师岗位个人简历自我评价范文
  12. centos7下载,centos iso文件下载
  13. CycleGAN的测试
  14. mac pro 安装双系统与windows下解决右键问题
  15. JVM和DVM的区别
  16. C#设置按钮鼠标进入时半透明样式
  17. 播放器无法挂载.VTT文件字幕(Coursera)
  18. 设计模式初探-观察者模式
  19. 计算机怎么一键到桌面快捷键,关于添加一键返回桌面快捷键在win10电脑中的技巧...
  20. windows系统redis部署配置(IP/端口/服务)配置

热门文章

  1. 爬虫系列---scrapy post请求、框架组件和下载中间件+boss直聘爬取
  2. C# 批量修改Word模板
  3. 蓝桥杯国赛 对局匹配(DP)
  4. The 16th Heilongjiang Provincial Collegiate Programming Contest部分题解
  5. Spark性能调优案例-优化spark估计表大小失败 和 小表关联 走 broadcast join
  6. 江南百景图显示服务器错误,江南百景图通讯失败请保持网络畅通并重试
  7. fopen中r+和w+的区别
  8. VB.NET连接FireBird(整理最全)
  9. python日期加减一年_Python日期的加减等操作
  10. 美杀人魔BTK与警方玩“老鼠戏猫”游戏31年,却栽在一个小小的word文档上面!...