【算法萌新闯力扣】:卡牌分组
力扣热题:卡牌分组
一、开篇
今天是备战蓝桥杯的第22天。这道题触及到我好几个知识盲区,以前欠下的债这道题一并补齐,哈希表的遍历、最大公约数与最小公倍数,如果你还没掌握,这道题练起来!
二、题目链接: 914.卡牌分组
三、题目描述
四、代码思路
1.由于需要每种卡牌的数量,我们可以利用桶排或哈希表统计各种卡牌的数量,下面代码使用的是哈希表。
2.题目的分组要求是每组要有相同的牌,且牌的数量要大于等于2,那可以想成每种卡牌之间的最大公约数大于等于2,瞬间豁然开朗。
3.这样,我们只需要遍历哈希表中所有的值,利用求最大公约数的函数求出他们之间的最大公约数即可
五、重要知识点
遍历哈希表
Map<Integer, Integer> map = new HashMap<>();
for(Map.Entry<Integer, Integer> entry: map.entrySet()){ //增强for循环gcd1 = entry.getValue(); //gcd1获取哈希表的值gcd1 = entry.getKey(); //gcd1获取哈希表的键
}
最大公约数与最小公倍数
最大公约数:在这个函数中,如果 x 为0,那么函数返回 y。否则,函数将 y 和 x 传递给自身,但 x 是 y 对 x 的余数。这是欧几里得算法的基本步骤。
具体原理大家就自行搜索吧,总之,记住这个函数,最小公倍数也能很简单的推出,真不错!
//最大公约数
public int gcd(int x, int y){return x == 0 ? y : gcd(y % x, x);
}//最小公倍数:调用最大公约数函数
public int lcm(int x, int y) {return x * y / gcd(x, y); //若有负数,就取绝对值
}
//担心x*y溢出,可以写成这样
public int lcm(int x, int y) {int gcd = gcd(x, y);return (x / gcd) * (y / gcd) * gcd;
}
六、代码纯享版
class Solution {public boolean hasGroupsSizeX(int[] deck) {Map<Integer, Integer> map = new HashMap<>();for(int num: deck) {map.put(num, map.getOrDefault(num, 0) + 1);}int gcd1 = -1;for(Map.Entry<Integer, Integer> entry: map.entrySet()){if(gcd1 == -1) gcd1 = entry.getValue();else gcd1 = gcd(gcd1 , entry.getValue());}if(gcd1 >= 2) return true;else return false;}public int gcd(int x, int y){return x == 0 ? y : gcd(y % x, x);}
}
七、代码逐行解析版
class Solution {public boolean hasGroupsSizeX(int[] deck) {Map<Integer, Integer> map = new HashMap<>();//创建哈希表for(int num: deck) { //遍历整个数组map.put(num, map.getOrDefault(num, 0) + 1); //统计每种卡牌的数量}int gcd1 = -1; //gcd1用来记录卡牌之间的最大公约数for(Map.Entry<Integer, Integer> entry: map.entrySet()){ //遍历整个哈希表if(gcd1 == -1) gcd1 = entry.getValue(); //gcd1还没有存值时,存入第一种卡牌的值else gcd1 = gcd(gcd1 , entry.getValue()); //利用函数求 原先所有卡牌的最大公约数 与 这个卡牌 的最大公约数}if(gcd1 >= 2) return true; //当gcd1大于等于2时,说明返回题目要求的X>=2,返回trueelse return false; //否则返回false}public int gcd(int x, int y){ //计算最大公约数的函数,非常实用简洁return x == 0 ? y : gcd(y % x, x);}
}
八、结语
如果这道力扣题的分享对您有所帮助,点个关注,我会每天更新力扣题的讲解,与大伙儿一同向前迈进!
相关文章:
【算法萌新闯力扣】:卡牌分组
力扣热题:卡牌分组 一、开篇 今天是备战蓝桥杯的第22天。这道题触及到我好几个知识盲区,以前欠下的债这道题一并补齐,哈希表的遍历、最大公约数与最小公倍数,如果你还没掌握,这道题练起来! 二、题目链接:…...
深入解析:如何开发抖音票务小程序
当下,开发抖音票务小程序成为了吸引年轻用户群体的一种创新方式。本文将深入解析如何开发抖音票务小程序,探讨关键步骤和技术要点。 1.确定需求和功能 考虑到抖音的用户特点,可以加入与短视频相关的票务功能,如在线购票、观影记录…...
vue中 mixin用法
在Vue.js中,mixin是一种可以在多个组件之间共享Vue组件选项的灵活方式。mixin对象可以包含任何组件选项。当组件使用mixin时,所有mixin对象的选项将被“混合”到该组件的选项中。 使用mixin的一个主要优点是可以在多个组件之间重用和共享代码。这可以帮…...
Java入门基础:浅显易懂 while
文章目录 前言一、布尔表达式二、while三、语法四、示例 前言 在开发过程中不管是 while 语句还是其他语句都会经常用到布尔表达式,所以在学习 while 之前需要先明白什么是布尔表达式? 一、布尔表达式 布尔表达式只有2种结果:true / false 看…...
DNS/ICMP协议、NAT技术
目录 DNS协议DNS背景域名简介 ICMP协议ICMP功能ping命令traceroute命令 NAT技术NAT技术背景NAT IP转换过程NAPTNAT技术的缺陷NAT和代理服务器 网络协议总结应用层传输层网络层数据链路层 DNS协议 DNS(Domain Name System,域名系统)协议&…...
React整理总结(七、Hooks)
1.Class组件的优缺点 优点 class组件可以定义自己的state,用来保存组件自己内部的状态;函数式组件不可以,因为函数每次调用都会产生新的临时变量;class组件有自己的生命周期,我们可以在对应的生命周期中完成自己的逻…...
软件测试之银行测试详解
一、金融类软件测试 举个栗子,银行里的软件测试工程师。横向跟互联网公司里的测试来说,薪资相对稳定,加班的话想对来说没那么多(有些银行加班也挺严重的),但业务稳定。实在是测试类岗位中的香饽饽…...
C#中的警告CS0120、CS0176、CS0183、CS0618、CS8600、CS8602、CS8604、CS8625及处理
目录 一、CS0120 二、CS0176 1.解决前 2.解决后 3.解决办法 三、CS0183 四、CS0618 五、CS8600 六、CS8602 七、CS8622 1. 解决前: 2. 解决后: 3.解决方法: 八、CS8604和CS8625 一、CS0120 严重性 代码 说明 项目 文件 行…...
CSS:浏览器设置placeholder样式 / 微信小程序设置placeholder样式
一、web 设置placeholder 设置浏览器的placeholder样式 ::-webkit-input-placeholder { /* WebKit browsers */color: #999; } :-moz-placeholder { /* Mozilla Firefox 4 to 18 */color: #999; } ::-moz-placeholder { /* Mozilla Firefox 19 */color: #999; } :-ms-input-p…...
升级python后sudo apt-get update报错
sudo apt-get update 报错: sh: /usr/lib/cnf-update-db: /usr/bin/python3.7.5: bad interpreter: No such file or directory Reading package lists... Done E: Problem executing scripts APT::Update::Post-Invoke-Success if /usr/bin/test -w /var/lib/c…...
应用可观测性OpenTelemetry简介
应用可观测性OpenTelemetry简介 OpenTelmetry遥测方案可观测性三支柱日志 Logs指标跟踪 什么是OpenTelemetryOpenTelemetry架构和组件OpenTelemetry与OpenCensus、OpenTracing是什么关系 OpenTelmetry遥测方案 可观测性三支柱 日志 Logs 日志是特定事件在特定时间点发生的文本…...
install pnpm : 无法加载文件的解决办法
问题描述 我在使用pnpm的时候报错 PS D:\emss\pure-admin-backend> pnpm install pnpm : 无法加载文件 C:\Users\RD-16\AppData\Roaming\npm\pnpm.ps1。未对文件 C:\Users\RD-16\AppData\Roaming\npm\pnpm.ps1 进行数字签名。无法在当前系统上运 行该脚本。有关运行脚本和设…...
【Python百宝箱】Python数据探险:Excel与数据科学的完美结合
前言 在当今信息爆炸的时代,数据处理和分析已经成为各行各业不可或缺的一部分。在众多数据处理工具中,Python以其简洁而强大的语法成为数据科学家和分析师的首选之一。本文将深入探讨与电子表格处理相关的Python库,介绍它们的功能、应用场景…...
外贸分享|如何从外贸小白成长为大咖?这10件事值得你坚持做
外贸成功不是一朝一夕的事,而是需要有充分的准备和持续的努力。作为一位有着丰富经验的外贸人员,我总结了成功的秘诀,分享了一个优秀的外贸人应该做好的10项工作。 1 找不到客户怎么办? 有很多各种各样的原因值得思考:…...
深度学习之六(自编码器--Autoencoder)
概念 自编码器(Autoencoder)是一种神经网络架构,用于无监督学习和数据的降维表示。它由两部分组成:编码器(Encoder)和解码器(Decoder)。 结构: 编码器(Encoder): 接收输入数据并将其压缩为潜在表示(latent representation),通常比输入数据的维度要低。编码器的…...
Docker Swarm总结+基础、集群搭建维护、安全以及集群容灾(1/3)
博主介绍:Java领域优质创作者,博客之星城市赛道TOP20、专注于前端流行技术框架、Java后端技术领域、项目实战运维以及GIS地理信息领域。 🍅文末获取源码下载地址🍅 👇🏻 精彩专栏推荐订阅👇🏻…...
Vim 一下日志文件,Java 进程没了?
一次端口告警,发现 java 进程被异常杀掉,而根因竟然是因为在问题机器上 vim 查看了 nginx 日志。下面我将从时间维度详细回顾这次排查,希望读者在遇到相似问题时有些许启发。 时间线 15:19 收到端口异常 odin 告警。 状态:P1故障 名称:应用端…...
C# Dictionary的使用
在 C# 中,Dictionary 是一种常用的数据结构,用于存储键值对。以下是一些常见的 Dictionary 操作: 创建和初始化一个 Dictionary 可以使用以下代码创建并初始化一个 Dictionary: Dictionary<string, int> dict new Dicti…...
解决DaemonSet没法调度到master节点的问题
最近在kubernetes部署一个springcloud微服务项目,到了最后一步部署边缘路由:使用nginx-ingress和traefik都可以,必须使用DaemonSet部署,但是发现三个节点,却总共只有两个pod。 换句话说, DaemonSet没法调度…...
2023.11.20 关于 Spring MVC 详解
目录 MVC 工作流程 Spring MVC 掌握三个功能 创建 Spring MVC 项目 推荐安装插件 EditStarters 基础注解 RequestMapping 指定 GET 和 POST 方法类型 ResponseBody 获取参数 传递 单个 或 多个参数 参数重命名 RequestParam 接收 JSON 对象 RequestBody 获取 …...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
