博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode.914 卡牌分组
阅读量:7231 次
发布时间:2019-06-29

本文共 1036 字,大约阅读时间需要 3 分钟。

题目要求 给定一副牌,每张牌上都写着一个整数。 此时,你需要选定一个数字 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 <= 100000 <= deck[i] < 10000复制代码

题目连接:

本题在 LeetCode 中定义为简单,就是求最大公约数的问题,能用到的知识有 【数学】【数组】。 解题思路:求数组频数的最大公约数,如果公约数小于2 则是False 也就是 X(a+b+c) % X === 0

一般多个数的最大公约数算法

function gcd(a, b) {    return b > 0 ? gcd (b, b % a) : a}复制代码

代码

const hasGroupsSizeX = deck => {    let map = {}    for(let item of deck) {        map[item] = ~~map[item] + 1    }        const min = Math.min(...Object.values(map))    if(min < 2) return false      for (let index of Array(min).fill().keys()) {        if(index === 0) continue        if(Object.values(map).every(item => item % (index + 1) === 0)) {            return true        }    }      return false}复制代码

转载地址:http://pkjfm.baihongyu.com/

你可能感兴趣的文章
LAMP搭建
查看>>
Twemproxy安装配置
查看>>
SCOM2012功能测试(29)—查看-Diagnostics
查看>>
jira安装
查看>>
CF712E Memory and Casinos
查看>>
4027. [HEOI2015]兔子与樱花【树形DP】
查看>>
C++之const类成员变量,const成员函数
查看>>
vue生命周期
查看>>
javascript 解决跨越问题
查看>>
ZPL通用打印类
查看>>
【leetcode】907. Sum of Subarray Minimums
查看>>
【leetcode】983. Minimum Cost For Tickets
查看>>
小程序微服务单个SSL证书部署多个项目解决方案
查看>>
数组冒泡排序
查看>>
OpenGL ES 入门之旅 -- GLSL加载图片案例
查看>>
【精彩直播预告】互联网老司机紫龙教你“如何在618采购你的第一台云服务器!”...
查看>>
百度翻译sign加密算法
查看>>
如何将数据库账号(用户)解锁
查看>>
Batch Normalization层
查看>>
常见的几种数组去重的方法,总有一种适合你~
查看>>