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);
    	}
    }
    
  • 相关阅读:
    微信支付退款部分代码
    Raspberry PI 点亮LED
    Raspberry PI 摄像头
    RaspberryPI 3B系统烧录
    MySQL基础使用
    MySQL数据库管理系统概述
    Eclipse创建JAVA项目
    Brup Suite拦截https请求
    Github 第一个仓库
    python os模块主要函数
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12581046.html
Copyright © 2011-2022 走看看