leetcode 914. 卡牌分组

这篇具有很好参考价值的文章主要介绍了leetcode 914. 卡牌分组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接:leetcode 914

1.题目

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

此时,你需要选定一个数字 X,使我们可以将整副牌按下述规则分成 1 组或更多组:

每组都有 X 张牌。
组内所有的牌上都写着相同的整数。
仅当你可选的 X >= 2 时返回 true。

2.示例

1)示例 1:
输入:deck = [1,2,3,4,4,3,2,1]
输出:true
解释:可行的分组是 [1,1],[2,2],[3,3],[4,4]

2)示例 2:
输入:deck = [1,1,1,2,2,2,3,3]
输出:false
解释:没有满足要求的分组。

3)提示:
1 <= deck.length <= 10^4
0 <= deck[i] < 10^4

3.分析

首先对数组排序,我们可以得到每个数出现的次数,设它们出现的次数的数组为[a,b,c…],那么可行的分组最明显的是:
a=b=c。。。那么可以直接暴力地将同一个数分在一个组就行,但是存在反例,比如[2,2,4,4,4,4]的可行分组也可以是[2,2],[4,4],[4,4],我又想可以直接按照最少出现次数分,但是也存在反例,比如[2,2,2,2,4,4,4,4,4,4]也存在可行分组为[2,2],[2,2],[4,4],[4,4],[4,4]。那么可以发现当这些出现次数的最大公因数>2时,可以满足条件文章来源地址https://www.toymoban.com/news/detail-803482.html

4.代码

class Solution {
public:
    int gcd(int a,int b){
        if(a>b) swap(a,b);
        if(b%a==0) return a;
        return gcd(b%a,a);
    }
    bool hasGroupsSizeX(vector<int>& deck) {
        sort(deck.begin(),deck.end());
        map<int,int> map1,map2;int a=0;
        for(int i=0;i<deck.size();i++)
            if(map1.count(deck[i])==0) {map1[deck[i]]=1;a++;}
            else map1[deck[i]]++;
        vector<int> test;
        for(int i=0;i<deck.size();i++)
            if(map2.count(deck[i])==0) {map2[deck[i]]=1;test.push_back(map1[deck[i]]);}
        sort(test.begin(),test.end());
        int ans=test[0];
        for(int i=1;i<test.size();i++)
            ans=gcd(ans,test[i]);
        if(ans<2) return false;return true;
    }
};

到了这里,关于leetcode 914. 卡牌分组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode热题100. 字母异位词分组

    Problem: 49. 字母异位词分组 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“nat”

    2024年02月19日
    浏览(40)
  • 【LeetCode:49. 字母异位词分组 | 哈希表】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域新星创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年01月23日
    浏览(57)
  • leetcode-49.字母异位词分组-day20

           

    2024年02月10日
    浏览(43)
  • 力扣(leetcode)第830题较大分组的位置(Python)

    题目链接:830.较大分组的位置 在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。 例如,在字符串 s = “abbxxxxzyy” 中,就含有 “a”, “bb”, “xxxx”, “z” 和 “yy” 这样的一些分组。 分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示

    2024年01月20日
    浏览(53)
  • LeetCode每日一题——813. 最大平均值和的分组

    题目: 813. 最大平均值和的分组 难度: 普通 给定数组 nums 和一个整数 k 。我们将给定的数组 nums 分成 最多 k 个相邻的非空子数组 。 分数 由每个子数组内的平均值的总和构成。 注意我们必须使用 nums 数组中的每一个数进行分组,并且分数不一定需要是整数。 返回我们所能

    2024年02月13日
    浏览(37)
  • Golang | Leetcode Golang题解之第49题字母异位词分组

    题目: 题解:

    2024年04月26日
    浏览(72)
  • Codeforces Round 914 (Div. 2)A~C

    A 反过来考虑,由皇后和国王的位置去寻找骑士的位置,当一个点既可以被皇后找到,也可以被国王找到时就说明这个点是满足条件的 B 思路:排序+前缀和 先排序,对于 a [ i ] , 前面的数一定是小于它的一定可以被删除,需要找到后面最远能到达哪里 a[i],前面的数一定是小于

    2024年01月25日
    浏览(35)
  • 5.2.11 IP分组的转发(二)IP分组转发算法

    5.2.11 IP分组的转发(二)IP分组转发算法 我们前面已经了解了路由器的结构以及直接交付和间接交付的概念,明白了路由器会根据路由协议生成路由表再根据路由表生成转发表,当路由器收到一个待转发的IP分组以后,会根据分组的转发算法,在转发表中为该分组寻找合适的

    2024年02月09日
    浏览(48)
  • SM4分组密码算法

    SM4.0于2013年3月被列为国家密码行业标准“GM/T 0002-2012《SM4分组密码算法》(原SMS4分组密码算法)”。2016年被列入国家标准(GB/T 32907-2016) 在商用密码体系中,SM4主要用于数据加密,其算法公开,分组长度与密钥长度均为128bit。加密算法与密钥扩展算法都采用32轮非线性迭代

    2024年02月12日
    浏览(39)
  • 【算法题】49. 字母异位词分组

    给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs = [\\\"eat\\\", \\\"tea\\\", \\\"tan\\\", \\\"ate\\\", \\\"nat\\\", \\\"bat\\\"] 输出: [[\\\"bat\\\"],[\\\"nat\\\",\\\"tan\\\"],[\\\"ate\\\",\\\"eat\\\",\\\"tea\\\"]] 示例 2: 输入: strs = [\\\"\\\"] 输出:

    2024年01月22日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包