zoukankan      html  css  js  c++  java
  • LeetCode 914. 卡牌分组

    我的LeetCode:https://leetcode-cn.com/u/ituring/

    我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

    LeetCode 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
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路

    思路1-学会抽象题目是一个长久要锻炼的能力!

    抽象题意:给一堆数,求这些数是否存在不小于1的最大公约数;
    步骤:

    1. 统计各数出现次数;
    2. 逐个gcd求最大公约数,等于1的直接返回false,否则最后返回true;

    总结:抽象题意是学习算法的必修技能!

    算法源码示例

    package leetcode;
    
    /**
     * @author ZhouJie
     * @date 2020年3月27日 下午1:22:07 
     * @Description: 914. 卡牌分组
     *
     */
    public class LeetCode_0914 {
    
    }
    
    class Solution_0914 {
    	/**
    	 * @author: ZhouJie
    	 * @date: 2020年3月27日 下午1:23:20 
    	 * @param: @param deck
    	 * @param: @return
    	 * @return: boolean
    	 * @Description: 1-题目抽象,验证所给的数是否有不小于2的最大公约数;
    	 *
    	 */
    	public boolean hasGroupsSizeX(int[] deck) {
    		// 题目指定数的范围[0,10000)
    		int[] statistics = new int[10000];
    		for (int i : deck) {
    			statistics[i]++;
    		}
    		int num = 0;
    		for (int i : statistics) {
    			if (i > 0) {
    				num = gcd(i, num);
    				if (num == 1) {
    					return false;
    				}
    			}
    		}
    		return true;
    	}
    
    	/**
    	 * @author: ZhouJie
    	 * @date: 2020年3月27日 下午1:28:42 
    	 * @param: @param a
    	 * @param: @param b
    	 * @param: @return
    	 * @return: int
    	 * @Description: 求两数的最大公约数
    	 *
    	 */
    	private int gcd(int a, int b) {
    		return b == 0 ? a : gcd(b, a % b);
    	}
    }
    
  • 相关阅读:
    vue中的 computed 和 watch 的区别
    mysql8.0 初始化数据库及表名大小写问题
    sql server alwayson 调整数据文件路径
    zabbix 自定义监控 SQL Server
    mysql 创建用户及授权
    mysql 设置从库只读模式
    mysql8.0 主从复制安装及配置
    centos8.0安装mysql8.0
    centos8替换阿里数据源
    npm publish 报错 【you or one of your dependencies are requesting a package version that is forbidden by your security policy】
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12581046.html
Copyright © 2011-2022 走看看