952. 按公因数计算最大组件大小

Problem: 952. 按公因数计算最大组件大小

文章目录

  • 思路
  • 解题方法
  • 复杂度
  • Code

思路

这个问题可以通过并查集来解决。我们可以将每个数的因子看作是连接这些数的桥梁。如果两个数有共同的因子,那么这两个数就可以被归为同一组。我们的目标是找到最大的这样的组。

解题方法

首先,我们需要初始化并查集。然后,对于数组中的每个数,我们找出它的所有因子,并将这些因子对应的数进行合并。最后,我们找出并查集中最大的集合。

复杂度

时间复杂度:

O ( n m ) O(n\sqrt{m}) O(nm ),其中 n n n是数组的长度, m m m是数组中的最大值。这是因为我们需要对每个数找出其所有的因子,这个过程的时间复杂度是 O ( m ) O(\sqrt{m}) O(m )

空间复杂度:

O ( n ) O(n) O(n),我们需要使用额外的空间来存储并查集。

Code

class Solution {public static int MAXV=100001;public static int MAXN = 20001;public static int[] factors = new int[MAXV];public static int[] f = new int[MAXN];public static int[] size = new int[MAXN];public static int n;public static void build() {for (int i = 0; i < n; i++) {f[i] = i;size[i] = 1;}Arrays.fill(factors, -1);}public static int find(int i) {if (i != f[i]) {f[i] = find(f[i]);}return f[i];}public static void union(int x, int y) {int fx = find(x);int fy = find(y);if (fx != fy) {f[fx] = fy;size[fy] += size[fx];}}public static int maxSize() {int ans = 0;for(int i = 0; i < n; i++) {ans = Math.max(ans, size[i]);}return ans;}public static int largestComponentSize(int[] nums) {n = nums.length;build();for (int i = 0, x; i < n; i++) {x = nums[i];for (int j = 2; j <= x / j; j++) {if (x % j == 0) {if (factors[j] == -1) {factors[j] = i;} else {union(factors[j], i);}while (x % j == 0) {x /= j;}}}if (x > 1) {if (factors[x] == -1) {factors[x] = i;} else {union(factors[x], i);}}}return maxSize();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【图像识别】Swin Transformer

一、引言 论文&#xff1a; Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 作者&#xff1a; Microsoft Research Asia 代码&#xff1a; Swin Transformer 特点&#xff1a; 提出滑动窗口自注意力 (Shifted Window based Self-Attention) 解决Vi…

RegExp魔法阵与Cookie记忆宫殿:JavaScript 中的秘密宝藏

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f506;RegExp &#x1f3b2; 1 什么是正则表达式 &#x1f3b2;2 创建…

「TypeScript」TypeScript入门练手题

前言 TypeScript 越来越火&#xff0c;现在很多前端团队都使用它&#xff0c;因此咱们前端码农要想胜任以后的前端工作&#xff0c;就要更加熟悉它。 入门练手题 interface A {x: number;y: number; }type T Partial<A>;const a: T { x: 0, y: 0 }; const b: T { …

数据可视化训练第二天(对比Python与numpy中的ndarray的效率并且可视化表示)

绪论 千里之行始于足下&#xff1b;继续坚持 1.对比Python和numpy的性能 使用魔法指令%timeit进行对比 需求&#xff1a; 实现两个数组的加法数组 A 是 0 到 N-1 数字的平方数组 B 是 0 到 N-1 数字的立方 import numpy as np def numpy_sum(text_num):"""…

“1-of-k“编码(哑编码)

"1-of-k"编码&#xff0c;也称为"one-hot"编码&#xff0c;是一种常用的向量编码方法&#xff0c;用于表示分类变量。在计算机科学和机器学习领域&#xff0c;它是一种重要的数据预处理技术。 1. 分类变量&#xff1a;在机器学习中&#xff0c;数据通常包含…

互动科技如何强化法治教育基地体验?

近年来&#xff0c;多媒体互动技术正日益融入我们生活的各个角落&#xff0c;法治教育领域亦不例外。步入法治教育基地&#xff0c;我们不难发现&#xff0c;众多创新的多媒体互动装置如雨后春笋般涌现&#xff0c;这些装置凭借前沿的科技手段&#xff0c;不仅极大地丰富了法制…

【RabbitMQ】消息队列 - RabbitMQ的使用记录

目录 一、什么是消息队列 二、什么是RabbitMQ 三、安装RabbitMQ 3.1 安装Erlang环境 3.2 安装RabbitMQ 3.3 打开服务管理界面 3.4 常用命令 四、Python示例代码 4.1 发送数据 4.2 接收数据 一、什么是消息队列 消息队列(Message Queue)是一种用于在应用程序之间传递消…

nginx在CentOS系统安装

一&#xff1a;nginx在CentOS系统安装 1.更新系统软件包列表 yum update2.安装EPEL存储库 通过使用EPEL&#xff0c;您可以访问大量的开源软件包&#xff0c;包括Web服务器、数据库、开发工具、版本控制系统、网络安全工具等等。 yum install epel-releas3.安装Nginx yum in…

【数据结构与算法】Huffman编码/译码(C/C++)

实践要求 1. 问题描述 利用哈夫曼编码进行信息通讯可以大大提高信道利用率&#xff0c;缩短信息传输时间&#xff0c;降低传输成本。但是&#xff0c;这要求在发送端通过一个编码系统对待传数据预先编码&#xff1b;在接收端将传来的数据进行译码(复原)。对于双工信道(即可以…

上亿用户面临风险!小米、WPS等知名安卓应用竟藏有“文件覆盖”漏洞

Google Play商店中的几款热门安卓应用程序容易受到与路径遍历相关的漏洞攻击&#xff0c;该漏洞的代号为“Dirty Stream”攻击&#xff0c;恶意应用程序可能会利用此漏洞覆盖易受攻击的应用程序主目录中的任意文件。 微软威胁情报团队的Dimitrios Valsamaras在周三发布的一份报…

pytorch学习

目前的状态&#xff1a;人有点晕。好多细节的东西都不知道怎么来的。大方向有所把握&#xff1a; 1. 准备数据集&#xff1a;看起来很简单&#xff0c;其实不然。如何把文件读取进来&#xff0c;变成pytorch所需要的数据类型。 图片&#xff1a;你就需要ToTensor&#xff0c;…

java数组查找方法(二分查找,顺序查找、插值查找法)

文章目录 前言一、二分查找法二、顺序查找法三、插值查找法总结 前言 查找&#xff08;Searching&#xff09;就是根据给定的某个值&#xff0c;在查找表中确定一个其关键字等于给定值的数据元素&#xff08;或记录&#xff09;。本文介绍Java数组中三种常见的查找算法&#x…

elementui- button按钮自适应大小

<el-button type"primary" class"daochu" click"download">导出</el-button> .daochu {width: calc(100vw * 80 / 1920);height: calc(100vw * 30 / 1920);font-size: calc(100vw * 13 / 1920); } 效果图&#xff1a;

做一个属于自己的软件-pyside6快速上手教程

首先环境需要安装python3和pip&#xff0c;软件使用pycharm&#xff0c;安装也都很简单 首先需要安装pyside6,在终端执行&#xff1a; pip install pyside6 然后进入可视化编辑界面 pyside6-designer 进入后创建即可 可以从左侧点击鼠标拉组件进入到中间的工作区&#xff…

android基础-服务

同样使用intent来传递服务 oncreate是服务第一次启动调用&#xff0c;onStartCommand是服务每次启动的时候调用&#xff0c;也就是说服务只要启动后就不会调用oncreate方法了。可以在myservice中的任何位置调用stopself方法让服务停止下来。 服务生命周期 前台服务类似于通知会…

人人都是开发者?Baidu Comate智能代码助手改变你传统的编程之路

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引入一、人人都是开发者二、Baidu Comate 智能编码助手2.1 Baidu Comate 是什么&#xff1f;2.2 Baidu Comate 支持那…

FANUC机器人工具坐标偏移的用法

一、工具坐标偏移的使用场景 在机器人位置不改变的情况下&#xff0c;工业机器人使用默认工具坐标系示教的一系列运动点位&#xff0c;要保持原本点位位置不变的情况下&#xff0c;改变机器人工具坐标的参数&#xff0c;就要用到机器人坐标转化的功能。在FANUC机器人上体现为机…

Vue10 组件通信-插槽

插槽 分成三种&#xff1a;默认插槽、具名插槽、作用域插槽 默认插槽 父组件father.vue <template><div class"father"><h3>父组件</h3><div class"content"><Category title"热门游戏列表"><ul>…

OSPF综合实验(超详细易懂)(HCIP)

1、拓扑信息 2、需求分析 3、IP规划 4、配置 5、测试 1、拓扑信息 2、需求分析 R4为ISP&#xff0c;其上只能配置I地址&#xff1b; R4与其他所有直连设备间均使用公…

【Linux系列】tail查询使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…