初学python记录:力扣928. 尽量减少恶意软件的传播 II

news/2024/5/17 18:22:17

题目:

给定一个由 n 个节点组成的网络,用 n x n 个邻接矩阵 graph 表示。在节点网络中,只有当 graph[i][j] = 1 时,节点 i 能够直接连接到另一个节点 j

一些节点 initial 最初被恶意软件感染。只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意软件感染。这种恶意软件的传播将继续,直到没有更多的节点可以被这种方式感染。

假设 M(initial) 是在恶意软件停止传播之后,整个网络中感染恶意软件的最终节点数。

我们可以从 initial 中删除一个节点并完全移除该节点以及从该节点到任何其他节点的任何连接。

请返回移除后能够使 M(initial) 最小化的节点。如果有多个节点满足条件,返回索引 最小的节点 。

提示:

  • n == graph.length
  • n == graph[i].length
  • 2 <= n <= 300
  • graph[i][j] 是 0 或 1.
  • graph[i][j] == graph[j][i]
  • graph[i][i] == 1
  • 1 <= initial.length < n
  • 0 <= initial[i] <= n - 1
  •  initial 中每个整数都不同

思考:

今天的题和昨天的很相似,区别在于:“从 initial 中删除一个节点 = 完全移除该节点以及从该节点到任何其他节点的任何连接

相似的,仍然将图中所有彼此有路径到达的节点们看成一组,如果一组中有至少一个节点初始时被感染,那么这一组所有节点最后都会被感染。

我们要去掉initial中的一个节点和它的所有边之后,使剩下的感染节点最少 ----> 这个节点能且只能凭自己感染的节点最多(1. 通过其他initial节点连接的节点不算  2. 被多个initial节点感染的节点不算)

那么我们的算法步骤如下,数组visited记录每个节点能被多少initial节点凭自己感染("≥0"表示唯一的initial节点索引;"-2"表示有多个initial节点连接);字典sum_dict记录initial节点能且只能凭自己感染的节点数:

1. 遍历initial中的每个节点node。

2. 找到所有和node之间有路径的节点k,并进行判断:1. 若visited[k]为-1,则将visited[k]设为node;2. 若visited[k]为大于等于0的值,说明此前已经有initial节点感染他了,则将visited[k]设为-2.

3. initial中的每个节点node都判断完后,遍历visited数组,若值大于等于0,则说明这个节点只被一个initial节点感染了,将字典sum_dict中该initial节点对应的值加一。

4. 在字典sum_dict中找到值最大的initial节点返回。

代码如下:

from collections import dequeclass Solution(object):def minMalwareSpread(self, graph, initial):""":type graph: List[List[int]]:type initial: List[int]:rtype: int"""# 将互相能到达的节点们视为一个组,(如果initial中有属于这一组的节点)每组的节点数量即为这一个小网络的感染恶意软件的最终节点数n = len(graph)sum_dict = {}  # 字典sum_dict记录initial节点能且只能凭自己感染的节点数visited = [-1] * n  # 数组visited记录节点能被多少initial节点凭自己感染("≥0"表示唯一的initial节点索引;"-2"表示有多个initial节点连接)def connectedNodes(graph, initial, node):judged = [-1] * n    # 表示在这次遍历中,节点是否已经判断过了queue = deque()  # 队列储存待判断相邻节点的节点queue.append(node)while queue:x = queue.popleft()for k in range(n):if k == x:  # 跳过当前节点本身continueif judged[k] == -1 and graph[x][k] == 1 and k not in queue and k not in initial:queue.append(k)judged[k] = 1if visited[k] == -1:visited[k] = nodeelif visited[k] >= 0 and visited[k] != node and graph[x][k] == 1:visited[k] = -2for i in initial:connectedNodes(graph, initial, i)sum_dict[i] = 1for j in range(n):if visited[j] >= 0:sum_dict[visited[j]] += 1m = 0for key, value in sum_dict.items():    # 在字典sum_dict中找到值最大的initial节点返回if value > m:m = valueres = keyif value == m and key < res:res = keyreturn res

提交通过,debug了一万年,泪目:

 


http://www.mrgr.cn/p/61001651

相关文章

7-04. 实现数据读取开始新游戏和加载进度

修改 SaveSlotUI修改 DataSlot修改 TransitionManager修改 DataSlot修改 SaveSlotUI修改 SaveLoadManager修改 EventHandler修改 SaveSlotUI新游戏需要执行的操作 Player修改 Settings这个坐标请去 Unity 里面进行查看 NPC 的初始位置具体数值以 Unity 实际情况为准 InventoryM…

搭建Appium工具环境

1、安装Java Development Kit&#xff08;JDK&#xff09; 前往Oracle官网下载JDK。 在https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 找到最新版本的JDK。根据操作系统选择适合的版本&#xff0c;并根据指示下载安装程序。 安装JDK。运行下载的安…

ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等

目录 ES6概念ECMAScript6简介ECMAScript 和 JavaScript 的关系ES6 与 ECMAScript 2015 的关系 1、let 、 const 、var 区别2、变量解构赋值1、数组解构赋值2、对象解构赋值3、字符串的解构赋值 3、展开剩余运算符1、**展开运算符(...)**2、**剩余运算符(...)** 4、函数的拓展函…

python自动化之网易自动点歌

这个代码是是使用的pyautogui库和pyperclip库完成的&#xff0c;这个库是开源的地址如下&#xff1a;https://github.com/asweigart/pyautogui这里详细的用法想学习的可以到这看看 下面是代码&#xff1a; import pyautogui import subprocess import pyperclip import time i…

[03] JS-基础语法(二)

1. 判断、循环 1.1 if-elseif 语句 if else 语句 if else if else 语句e.g. 编写一个程序,获取一个用户输入的整数,然后显示这个数是奇数还是偶数。 // 编写一个程序,获取一个用户输入的整数 // let num = +prompt("请输入一个整数") let num = parseInt(prompt(&…

栈5-后缀表达式求解

栈5-后缀表达式的求解求解过程 8 3 1 - 5 * +数字:进栈 [1,3,8] 符号: - 从栈中弹出右操作数 -1 从栈中弹出左操作数 3-1 根据符号进行运算 2 将运算结果压入栈中 [2,8] 遍历结束, 栈中唯一的数字作为计算结果定义栈结构 typedef struct MYNUM{LinkNode node;int val; } MyNum;…

对一个全局变量进行多线程并发 -- 或者 ++ 操作是否是安全的??是否是原子的??

1.结论&#xff1a; 不是安全的&#xff0c;不是原子的 2.原因&#xff1a; 2.1 不是原子性的原因&#xff1a; 一个线程将一个全局变量--&#xff08;减减&#xff09;时候&#xff0c;需要以下几个步骤 第一步&#xff1a;将全局变量读到cpu的寄存器中&#xff0c; 第二步…

异常处理、接口文档、 jwt介绍、

【异常处理 详见excel的异常处理的源码总结】# APIView--->dispatch--->三大认证,视图类的方法,如果出了异常, # 会被异常捕获,捕获后统一处理 # 关键就是dispatch里面的 response = self.handle_exception(exc) 这行代码# drf 内置了一个函数,只要上面过程出了异常…

Python用于比较数据结构并生成差异报告的工具库之data-diff使用详解

概要 Python的data-diff库是一个用于比较数据结构并生成差异报告的工具。它可以处理各种数据类型,如字典、列表、集合等,使得开发者能够快速识别数据之间的差异。 安装 通过pip可以轻松安装data-diff: pip install data-diff特性 支持多种数据类型:能够比较字典、列表、…

富文本编辑器(wangEdit)+(jquery.wordexport)实现web版在线编辑导出

小插曲&#xff1a;最开始的方向是Html5的contenteditable"true"的文档可编辑属性。只能修改文档文字内容&#xff0c;不能修改样式&#xff0c;如修改字体&#xff0c;字号&#xff0c;颜色等。于是用了第一款&#xff08;quil&#xff09;富文本插件。只能说一般&a…

栈3: 括号匹配

栈3: 括号匹配自定义数据结构 typedef struct MYCHAR{LinkNode node;char* pAddres; //数据域int index; // } MyChar;判断左右括号 int IsLeft(char c){return c==(; }int IsRight(char c){return c==); }创建栈结点 MyChar* CreatMyChar(char *p){MyChar* mychar = (MyChar*)…

“百度杯”CTF比赛 九月场-123

“百度杯”CTF比赛 九月场 123 题目类型:web 题目描述:12341234,然后就解开了,打开靶机是一个会员登陆界面:解题方法:先查看一下网页源码:这里说用户信息都在user.php里面,然后我们访问一下user.php:发现并没有任何信息 扫描一下它的目录文件看一下:扫出了一个user.p…

Redis(Windows版本下载安装和使用)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

DedeCMS让channelartlist支持currentstyle属性

织梦一二级导航菜单被点击顶级栏目高亮(加class)解决方法,DedeCMS让channelartlist支持currentstyle属性。 dedecms默认模板的channelartlist是不支持currentstyle属性的。currentstyle属性在导航中应用的比较多,可以实现循环调用栏目后,当前页<li>标签获得一个class=…

实验一-原型设计 微信卡包页面

微信卡包页面-原型设计分享 一、实验题目:原型设计 二、实验目的:掌握产品原型设计方法和相应工具使用。 三、实验要求对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。 1.墨刀:~适用领域:墨刀适用于快速原型设计和协作,特别是在移动应…

栈2: 链式存储

栈2: 栈的链式存储栈的结点 //链式栈的结点 typedef struct LINKNODE{struct LINKNODE *next; } LinkNode;链式栈的结构 //链式栈 typedef struct LINKSTACK{LinkNode head;int size; } LinkStack;栈的初始化 LinkStack* Init_LinkStack(){LinkStack *stack = (LinkStack*)mall…

【EM算法】算法及注解

EM算法又称期望极大算法&#xff0c;是一种迭代算法&#xff0c;每次迭代由两步组成&#xff1a;E步&#xff0c;求期望&#xff08;expectation&#xff09;&#xff1b;M步&#xff0c;求极大&#xff08;maximization&#xff09;。 算法背景 如果概率模型的变量都是观测变…

【VMware ESXi】新版VMware Host Client独立客户端Beta版发布。

VMware by Broadcom 推出了新的VMware Host Client 独立版客户端,用于代替VMware Host Client(Html5)来管理ESXi。VMware by Broadcom 推出了新的VMware Host Client 独立版客户端(Beta),用于代替VMware Host Client(Html5)来管理ESXi。同时,当前VMware Host Client不…

第二代长安X5 PLUS 2024款车机绕开限制安装第三方APP

测试车型:第二代长安X5 PLUS 2024款智尊型 系统版本:OnStyle 5.2.0 安卓版本:9.0 Pie 文章内容仅供参考,不同车型不同版本可能操作不同 一、拨号页 ##888 ,输入密码进入工厂模式 二、工厂模式动态密码规则:4位,和当前时间有关,24小时制,1、2位位当前分钟整十数,3、4位…