力扣:914. 卡牌分组 题解(Java)
题目地址:卡牌分组
题目描述:
给定一副牌,每张牌上都写着一个整数。
此时,你需要选定一个数字 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)相关推荐
- 力扣914.卡牌分组
题目描述 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌.组内所有的牌上都写着相同的整数. 仅当你可选的 X ...
- Leetcode每日一题(914. 卡牌分组)
914. 卡牌分组 题目: 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数 ...
- LeetCode 914. 卡牌分组
914. 卡牌分组 思路:统计个数,然后求最小公约数 class Solution { public:bool hasGroupsSizeX(vector<int>& deck) ...
- js + leetcode刷题:No.914 卡牌分组
思路:计数:求最大公约数,与2比较 题目: 卡牌分组 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内 ...
- 数据结构与算法之数组: Leetcode 914. 卡牌分组 (Typescript版)
卡牌分组 https://leetcode.cn/problems/x-of-a-kind-in-a-deck-of-cards/ 描述 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 ...
- LeetCode 914. 卡牌分组(最大公约数)
1. 题目 给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 ...
- python【力扣LeetCode算法题库】914. 卡牌分组(reduce collections.Counter)
给定一副牌,每张牌上都写着一个整数. 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当你可选的 X > ...
- 【Leetcode】914. 卡牌分组
文章目录 [题目] [题目分析] [代码实践] [题目] 此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组: 每组都有 X 张牌. 组内所有的牌上都写着相同的整数. 仅当 ...
- 2021-12-8 Leetcode 914.卡牌分组
class Solution {public:bool hasGroupsSizeX(vector<int>& deck) {map<int,int> hash_map ...
最新文章
- Kafka配置SASL/PLAIN认证
- 改变div php,js改变div样式
- 线程池框架_Java并发——Executor框架详解(Executor框架结构与框架成员)
- P2782 友好城市
- VMware Workstation Pro 无法在Windows 上运行的 解决办法
- 《需求规格说明书》业务描述活动图
- rpm安装mysql
- 宽带密码忘了怎么办?ADSL宽带账号密码找回教学
- LINGO编程简介与实例
- 员工自动离职可以申请经济补偿吗
- Android个人简历自我评价,Android开发工程师岗位个人简历自我评价范文
- centos7下载,centos iso文件下载
- CycleGAN的测试
- mac pro 安装双系统与windows下解决右键问题
- JVM和DVM的区别
- C#设置按钮鼠标进入时半透明样式
- 播放器无法挂载.VTT文件字幕(Coursera)
- 设计模式初探-观察者模式
- 计算机怎么一键到桌面快捷键,关于添加一键返回桌面快捷键在win10电脑中的技巧...
- windows系统redis部署配置(IP/端口/服务)配置
热门文章
- 爬虫系列---scrapy post请求、框架组件和下载中间件+boss直聘爬取
- C# 批量修改Word模板
- 蓝桥杯国赛 对局匹配(DP)
- The 16th Heilongjiang Provincial Collegiate Programming Contest部分题解
- Spark性能调优案例-优化spark估计表大小失败 和 小表关联 走 broadcast join
- 江南百景图显示服务器错误,江南百景图通讯失败请保持网络畅通并重试
- fopen中r+和w+的区别
- VB.NET连接FireBird(整理最全)
- python日期加减一年_Python日期的加减等操作
- 美杀人魔BTK与警方玩“老鼠戏猫”游戏31年,却栽在一个小小的word文档上面!...