力扣-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 <= deck.length <= 10000
0 <= deck[i] < 10000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/x-of-a-kind-in-a-deck-of-cards

public class _914卡牌分组 {/*** 解题思路:*      首先,本题的题意容易理解,但想要思考全面很难,所以要找出题目真正需要你去找的算法是什么?*      1、给一个int数组,找到这个数组中大于等于2的数,把所有的数按这个数来分组(每组有这么多个);*      2、另一种说法:将这个数组分组,每组数字个数相等且大于2。*      那么,我们所要做的就是把这个数组中的数字量进行统计,然后进行处理校验,如何做呢?*      1、我们需要拿出每个数和它出现的次数;*      2、对数字逐个进行辗转相除;*      3、(什么是辗转相除呢,就是求两个数的最大公约数);*      4、通过辗转相除,求出所有“个数”中的最大公约数,如果最后得到的最大公约数为1,则返回false。* @param deck* @return*/public static boolean hasGroupsSizeX(int[] deck) {// 计数int[] counter = new int[10000];for (int num: deck) {counter[num]++;}// 求所有数的最大公约数int x = 0;for(int cnt: counter) {if (cnt > 0) {x = gcd(x, cnt);System.out.println(x);if (x == 1) {return false;}}}System.out.println(x);return x >= 2;}// 辗转相除法,得到 a 和 b 的最大公约数。private static int gcd (int a, int b) {return b == 0? a: gcd(b, a % b);}//测试public static void main(String[] args) {int [] deck = {4,8,8,4,88};System.out.println("结果为:"+hasGroupsSizeX(deck));//       System.out.println("结果为:"+gcd(4,8));}}

以上!

伍六七带你学算法 入门篇-卡牌分组相关推荐

  1. 伍六七带你学算法 入门篇-最小的k个数

    java面试题-最小的k个数 难度-简单 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 1: 输入:a ...

  2. 伍六七带你学算法 入门篇——最后一个单词的长度

    难度 简单 给定一个仅包含大小写字母和空格 ' ' 的字符串 s,返回其最后一个单词的长度.如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词. 如果不存在最后一个单词,请返回 0 . 说 ...

  3. 伍六七带你学算法 入门篇 ——最大子序和

    力扣 53. 最大子序和 难度简单 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4 ...

  4. 伍六七带你学算法 入门篇-链表的中间节点

    力扣-876链表的中间节点 难度-简单 给定一个带有头结点 head 的非空单链表,返回链表的中间结点. 如果有两个中间结点,则返回第二个中间结点. 示例 1: 输入:[1,2,3,4,5] 输出:此 ...

  5. 伍六七带你学算法 入门篇-最长回文串

    力扣解题,每日一题:409. 最长回文串 难度- 简单 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" ...

  6. 伍六七带你学算法 入门篇-拼写单词

    力扣解题,每日一题 1160. 拼写单词 难度- 简单 给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 w ...

  7. 伍六七带你学算法 入门篇-矩形重叠

    力扣解题-----每日一题-836 矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标. 如果相交的面积为正,则称两矩形 ...

  8. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

  9. 伍六七带你学算法 进阶篇-排序算法

    给定一个整数数组 nums,将该数组升序排列. 示例 1: 输入:[5,2,3,1] 输出:[1,2,3,5] 示例 2: 输入:[5,1,1,2,0,0] 输出:[0,0,1,1,2,5] 各排序算 ...

最新文章

  1. 给模型加装饰器Java,装饰器设计模式
  2. nicstat命令安装与分析
  3. 程序员,技术的“背锅侠”,盘点 2020 年面向监狱编程的那些事!
  4. Android CoordinatorLayout使用
  5. 不得不爱,Visual Studio Code十大超酷特性
  6. Linux运维人员必会开源运维工具体系
  7. python编写篮球_Python编程2——Python实现计算篮球比赛是否领先安全的程序
  8. 使用display inline-block 布局时,出现的间距问题的解决办法和相关说明
  9. equals和=,==的区别
  10. vision transformer(viT)教学视频【通俗易懂】
  11. 理解lambda在linq中的应用
  12. 函数指针c语言typedef,typedef 函数指针的用法(附例子)
  13. Linux串口驱动分析write
  14. Maple 教程(一)---初认识
  15. 十几款Discuz精品采集插件免费下载,总有一款适合您!
  16. 精心整理Node.js入门---原理篇
  17. 极域课堂管理系统软件如何取消控制_《亲子沟通,调节孩子开学情绪》——烟洲小学家长课堂系列活动...
  18. Google Analytics中的基本度量四 “页面停留时间和网站停留时间
  19. 旋转矩阵之到底顺时针还是逆时针
  20. VUE 对@click的认识

热门文章

  1. Oracle根据日期区间查询Date类型的数据
  2. 2022-2028年中国儿童医疗行业深度调研及投资前景预测报告
  3. 2021-2027年中国医疗旅游业投资分析及前景预测报告
  4. 【运维学习笔记】运维入门
  5. JS 添加网页桌面快捷方式的代码
  6. 自动机器学习(AutoML)
  7. 地理围栏API服务开发
  8. 在NVIDIA A100 GPU中使用DALI和新的硬件JPEG解码器快速加载数据
  9. 适用于CUDA GPU的Numba例子
  10. CEVA引入新的可配置传感器集线器DSP架