当前位置: 首页 > news >正文

Python每日一练:蚂蚁家族(详解集合法)

文章目录

  • 前言
  • 一、题目
  • 二、代码分析
  • 总结


前言

这题挺有意思,感觉评简单难度有点低了,如果正经用无向图来做,代码还是有点长的。首先得建立节点,估计除第一个和最后一个每个节点都是一条线连进,一条线连出的。就可以这样设计节点,然后生成树,最后深度搜索。既然都是简单评价了,咱就用个简单的解法。这题和有一道参加宴会介绍人认识的题目很像,都可以用集合来解,而且更容易让人理解。

在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、题目

题目描述:
小蚂蚁群是一个庞大的群体,在这个蚂蚁群中有n只小蚂蚁 ,为了保证所有蚂蚁在消息传送的时候都能接收到消息,需要在他们之间建立通信关系。就是要求小蚂蚁都可以通过多只或者直接联系到其他人。 已知几条小蚂蚁之间有通信关系,请问还需要再新建至少多少条关系?

输入描述:
第一行输入整数n,m;n为小蚂蚁总数;m为关系数。(1<=n,m<=1000) 以下m行每行m对整数x,y。(代表x与y有联系)

输出描述:
输出最少需要新建关系数。

二、代码分析

代码如下(示例):

    def solution(self, n, m, vector):result = None# TODO: 请在此编写代码if vector.__len__() == 0:return n-1relation = [set(vector[0])]   # 用于存放有联系的集合rl = 1              # 上面集合的长度,手动写会快些,本身也是可知的for x in vector:    # 查找联系,生成集合setx = set(x)for j in range(rl):if ( not relation[j].isdisjoint(setx) ):relation[j] = relation[j].union(setx)breakelif j== rl-1:relation.append(setx)rl += 1part = relation.__len__()-  # 团体间无联系的数量,-1是需要几个新建的联系rela_all = set()    # 所有已参加团体的蚂蚁for x in relation:rela_all = rela_all.union(x)rela_all = len(rela_all)result = part +  n - rela_all  return result

看注释也就明白了,很简单的逻辑:
1、如果关系列表是空的,则需要新建n-1个关系。嗯,偷偷告诉你们,有这样的数据690,0,[ ]。

2、默认第一个关系为一个小团体的初始,设置rl = 1,因为所有新增小团体都是下面代码生成的,是可知的,所以此处写死了团体数量。下面的循环有相应的代码来增加这个值,很明显题目是要求无向图的,咱写集合肯定得考虑效率问题。事实上不用集合,直接用列表查询会超时,别问我咋知道的…

3、稍微有点复杂的就是关系集合生成这一步了,代码中x是每对关系,先变成集合。然后去列表中的小团体集合查询,有就加入,没有就新建一个小团体。其中 isdisjoint 是判断是否交集,这是个否定判断。意思是:“是不是不是交集” 呃~ 这要晕的,换个说法 “是否非交集”。返回 True 表示的是:不是交集。所以笔者在这里加了not,当是交集的时候,就加入。下面的else,要判断是不是最后一个小团体。因为 ralation 列表中可能有很多小团体集合,所以每次要遍历。只有当是最后一个小团体了,上面的代码又没将 x 加入,才新建一个小团体,同时将列表长度 rl 加1。

4、如上,我们就得到了所有的小团体,这里用 part 变量表示。显然,小团体之间需要一个联系就够了,所以这里是小团体数减1。

5、再然后,我们需要知道所有已加入小团体的蚂蚁数。这里用了一个 for 循环。全加入到一个集合中,union 是并集运算。

6、最后小团体之间需要的联系数加上蚂蚁数减去已参加小团体的数就是答案了。


总结

本想再用无向图搜索解一遍的,偷懒了~

相关文章:

Python每日一练:蚂蚁家族(详解集合法)

文章目录 前言一、题目二、代码分析总结 前言 这题挺有意思&#xff0c;感觉评简单难度有点低了&#xff0c;如果正经用无向图来做&#xff0c;代码还是有点长的。首先得建立节点&#xff0c;估计除第一个和最后一个每个节点都是一条线连进&#xff0c;一条线连出的。就可以这…...

图神经网络:在KarateClub数据集上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 文献阅读&#xff1a;代码实操&#xff1a; 文献阅读&#xff1a; 参考文…...

ArduPilot之开源代码调试技巧

ArduPilot之开源代码调试技巧 1. 源由2. ArduPilot Code Debugging Part13. ArduPilot Code Debugging Part24. 持续更新中。。。5. 参考资料 1. 源由 对于如何调试和验证ArduPilot&#xff0c;对于新手来说&#xff0c;有的时候反而是入门的一个门槛。 其实这个并不难&#…...

Linux网络基础-2

在之前的网络基础博客中&#xff0c;我们对网络的基本概念进行了一个简单的介绍&#xff0c;那么接下来的网络内容中&#xff0c;我们将对网络通信中的典型协议进行详细解释。 我们根据网络协议中的分层来对典型协议进行注意介绍&#xff0c;不过对于物理层的传输我们不做考究…...

软件测试报告模板

目录 2 1 概述... 3 1.1 测试目的... 3 1.2 测试策略... 3 1.3 测试方法... 3 1.4 计划验收标准... 3 1.5 测试用例... 4...

记一次azkaban调度异常处理

一、背景 预发布环境使用的数据库性能比较低&#xff0c;根据业务测试的需求&#xff0c;需要将数据库更换成 稳定高性能的数据库。更换业务数据库后azkaban定时任务失败 二、数据库服务信息 说明&#xff1a;该部分使用代号来代替&#xff0c;非真实信息 该数据库存储了azka…...

开发一个vue自定义指令的npm库-系列三:使用rollup打包npm库并发布

配置 rollup 使用rollup将 TypeScript 代码转换为 JavaScript&#xff0c;然后进行压缩和输出到目标文件。 项目根目录新建rollup.config.js import typescript from "rollup/plugin-typescript"; import terser from "rollup/plugin-terser"; import de…...

C嘎嘎的运算符重载基础教程以及遵守规则【文末赠书三本】

博主名字&#xff1a;阿玥的小东东 大家一起共进步&#xff01; 目录 基础概念 优先级和结合性 不会改变用法 在全局范围内重载运算符 小结 本期送书&#xff1a;盼了一年的Core Java最新版卷Ⅱ&#xff0c;终于上市了 基础概念 运算符重载是通过函数重载实现的&#xf…...

【MCAL_UART】-1.2-图文详解RS232,RS485和MODBUS的关系

目录 1 UART&#xff0c;RS232和RS485通信拓扑 2 什么是RS232 2.1 RS232标准的演变 2.2 RS232标准讲了哪些 2.2.1 RS232通信的电平 2.2.2 RS232通信的带宽 2.2.3 RS232通信距离 2.2.4 RS232通信的机械接口 3 什么是RS485 3.1 RS485标准的演变 3.2 RS485标准讲了哪些…...

设计模式详解(二)——单例模式

单例模式简介 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;创建型模式是一类最常用的设计模式&#xff0c;在软件开发中应用非常广泛&#xff0c;它提供了一种创建对象的最佳方式。 单例模…...

为什么hooks不能在循环、条件或嵌套函数中调用

hooks不能在循环、条件或嵌套函数中调用 为什么&#xff1f; 带着疑问一起去看源码吧&#xff5e; function App() {const [num, setNum] useState(0);const [count, setCount] useState(0);const handleClick () > {setNum(num > num 1)setCount(2)}return <p …...

互联网赚钱项目有哪些?目前最火的互联网项目

互联网是一个神奇的行业&#xff0c;大门不出二门不迈&#xff0c;一根网线一台电脑&#xff0c;甚至一台手机就可以赚钱。它给我们创造了前所未有的商业机会&#xff0c;让成千上万有梦想&#xff0c;敢想敢干的人通过互联网获得了巨大的成功&#xff01;正因为如此&#xff0…...

队列、栈专题

队列、栈专题 LeetCode 20. 有效的括号解题思路代码实现 LeetCode 921. 使括号有效的最少添加解题思路代码实现 LeetCode 1541. 平衡括号字符串的最少插入次数解题思路代码实现 总结 不要纠结&#xff0c;干就完事了&#xff0c;熟练度很重要&#xff01;&#xff01;&#xff…...

TensorFlow vs PyTorch:哪一个更适合您的深度学习项目?

在深度学习领域中&#xff0c;TensorFlow 和 PyTorch 都是非常流行的框架。这两个框架都提供了用于开发神经网络模型的工具和库&#xff0c;但它们在设计和实现上有很大的差异。在本文中&#xff0c;我们将比较 TensorFlow 和 PyTorch&#xff0c;并讨论哪个框架更适合您的深度…...

大项目环境配置

目录 Linux的龙蜥8是什么&#xff1f; OpenGL是什么&#xff1f; 能讲讲qt是什么吗&#xff1f; 我可以把qt技术理解为c工程师的前端开发手段吗&#xff1f; 我其实一直有些不懂大家所说的这个开发框架啥的&#xff0c;这个该如何理解呢 那现在在我看来&#xff0c;框架意…...

Elasticsearch——》正则regexp

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…...

五面阿里Java岗,从小公司到阿里的面经总结

​​​​​​​ 面试 笔试常见的问题 面试常见的问题下面给的面试题基本都有。 1 手写代码&#xff1a;手写代码一般会考单例、排序、线程、消费者生产者 排序。 2 写SQL很常考察group by、内连接和外连接 2.面试1-5面总结 1&#xff09;让你自我介绍 2&#xff09;做两道算法…...

redis(7)

全局ID生成器: 全局ID生成器&#xff0c;是一种在分布式系统下用来生成全局唯一ID的工具&#xff0c;一般要满足以下特性 唯一性高可用(随时访问随时生成)递增性安全性(不能具有规律性)高性能(生成ID的速度快) 为了增加ID的安全性&#xff0c;我们不会使用redis自增的数值&am…...

互联网从业者高频单词 300个

测试 (Test) 软件 (Software) 用例 (Test Case) 缺陷 (Defect) 提交 (Submit) 回归测试 (Regression Testing) 验收测试 (Acceptance Testing) 单元测试 (Unit Testing) 集成测试 (Integration Testing) 性能测试 (Performance Testing) 负载测试 (load Testing) 压…...

初始化vue中data中的数据

当组件的根元素使用了v-if的时候, 并不会初始化data中的数据 如果想完全销毁该组件并且初始化数据,需要在使用该组件的本身添加v-if 或者是手动初始化该组件中的数据 初始化化数据的一些方法 Object.assign(this.$data, this.$options.data()) this.$data&#xff1a;当前的da…...

Unity UGUI轻量UI框架:200行代码实现零GC界面管理

1. 为什么还要自己手写UI框架&#xff1f;——当UGUI原生方案开始“卡脖子”很多人看到这个标题第一反应是&#xff1a;“都2024年了&#xff0c;还手写UI框架&#xff1f;Asset Store里几十个成熟方案&#xff0c;NGUI、FairyGUI、TextMeshPro配套的UI系统一抓一大把&#xff…...

C++中显示与隐式加载dll的使用与区别

一、什么是 DLL&#xff1f;DLL&#xff08;Dynamic Link Library&#xff09; 是 Windows 下的动态链接库&#xff0c;包含可被多个程序共享的函数、资源或类。使用 DLL 可以实现代码复用、模块化设计和插件机制。在 C 中&#xff0c;调用 DLL 中的函数有两种主要方式&#xf…...

Win10系统清理避坑指南:你的BAT脚本真的安全吗?盘点那些不能乱删的文件

Win10系统清理避坑指南&#xff1a;BAT脚本安全操作手册每次看到那些号称"一键清理系统垃圾"的BAT脚本在技术论坛被疯狂转发&#xff0c;我的工程师朋友老张就会忍不住摇头。上周他刚帮一位设计师修复了崩溃的Photoshop——原因正是某个清理脚本删除了Adobe的临时工作…...

内网环境下Win7系统批量离线补丁部署实战指南

1. 内网Win7补丁部署的挑战与解决方案老旧Win7系统在内网环境中的安全隐患就像漏雨的屋顶&#xff0c;看似不影响日常使用&#xff0c;但随时可能引发严重后果。我经手过几十家单位的系统加固项目&#xff0c;发现这些场景存在三个典型痛点&#xff1a;首先是补丁来源问题&…...

Veo 2胶片质感生成器失效?——深度解析Color Science v2.3内核中被屏蔽的Cinematic Grain Injection层

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Veo 2胶片质感生成器失效现象全景透视 近期大量用户反馈&#xff0c;Veo 2 胶片质感生成器在调用 generate_film_effect() 接口后返回空纹理、纯灰帧或 HTTP 503 Service Unavailable 错误&#xff0c;且该问题…...

保姆级避坑指南:在Ubuntu 22.04上搞定ROS2 Humble、PX4与Gazebo的联合仿真(附Empy版本降级)

保姆级避坑指南&#xff1a;Ubuntu 22.04下ROS2 Humble与PX4联合仿真的21个关键陷阱当你在Ubuntu 22.04上第一次尝试搭建ROS2 Humble、PX4与Gazebo的联合仿真环境时&#xff0c;可能会遇到比预期更多的挑战。这不是一个简单的"复制粘贴命令就能完成"的任务——版本冲…...

终极Node.js Mock工具:Mockery入门到精通实战教程

终极Node.js Mock工具&#xff1a;Mockery入门到精通实战教程 【免费下载链接】mockery Simplifying the use of mocks with Node.js 项目地址: https://gitcode.com/gh_mirrors/mock/mockery Mockery是Node.js生态中简化Mock使用的终极工具&#xff0c;它为开发者提供了…...

如何用WaveTools终极优化《鸣潮》游戏性能:从卡顿到丝滑的完整指南

如何用WaveTools终极优化《鸣潮》游戏性能&#xff1a;从卡顿到丝滑的完整指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 如果你正在玩《鸣潮》却频繁遭遇帧率波动、画面卡顿或操作延迟&#xff0c;那…...

AB包相关知识

Lua与AB包/Addressables以及YooAsset 摘自千问&#xff1a; Lua 是菜谱&#xff08;逻辑&#xff09;&#xff1a;决定了菜怎么做&#xff0c;味道如何。因为你需要随时换菜谱&#xff08;热更新&#xff09;&#xff0c;所以菜谱不能死板地印在墙上&#xff08;编译进主包&a…...

鸿蒙HarmonyOS 5与Unity跨运行时通信实战指南

1. 这不是“调个API”那么简单&#xff1a;为什么鸿蒙Unity通信总在临门一脚卡住我第一次把Unity打包的AR模块塞进HarmonyOS 5 App里时&#xff0c;信心满满——毕竟文档里写着“支持JS/ArkTS调用Native能力”&#xff0c;Unity也标榜“跨平台通用”。结果呢&#xff1f;App一启…...