[LC952]按公因数计算最大组件大小
题目描述
给定一个由不同正整数的组成的非空数组 nums ,考虑下面的图:
有 nums.length 个节点,按从 nums[0] 到 nums[nums.length - 1] 标记;
只有当 nums[i] 和 nums[j] 共用一个大于 1 的公因数时,nums[i] 和 nums[j]之间才有一条边。
返回 图中最大连通组件的大小 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/largest-component-size-by-common-factor
提示:
1 <= nums.length <= 2 * 10^4
1 <= nums[i] <= 10^5
nums 中所有值都 不同
题目分析
最直接的想法是去遍历数组中的每一个数num。对于每一个数,可以考查其所有因子,并使用并查集将因子与这个数本身归为一个集合中,在这个过程中,数组中具有大于1的num之间也会被合并入相同的集合。最后,我们可以重新遍历nums数组,并通过并查集查询每个num对应的root,并统计对应的频次,保留最大的频次,就可以得到最大联通组件的大小。
代码
golang
type Union struct {
parent, rank []int
//rank按秩合并
}
func newUnion(n int) Union {
parent := make([]int, n)
for i := range parent {
parent[i] = i
}
return Union{parent, make([]int, n)}
}
func (u Union) find(x int) int {
if u.parent[x] != x {
//路径压缩
u.parent[x] = u.find(u.parent[x])
}
return u.parent[x]
}
func (u Union) merge(x int, y int) {
rootX := u.find(x)
rootY := u.find(y)
if rootX != rootY {
if u.rank[rootY] > u.rank[rootX] {
u.parent[rootX] = rootY
} else if u.rank[rootY] > u.rank[rootX] {
u.parent[rootY] = rootX
} else {
u.parent[rootX] = rootY
//更新秩
u.rank[rootY]++
}
}
}
func max(x int, y int) int{
if x > y {
return x
}
return y
}
func largestComponentSize(nums []int) int {
maxVal := 0
for _, num := range nums{
maxVal = max(num, maxVal)
}
union := newUnion(maxVal +1)
for _, num := range nums{
//暴力筛
for i := 2; i * i <= num; i++{
if num % i == 0{
union.merge(num, i)
union.merge(num, num/i)
}
}
}
rtn := 0
arr := make([]int, maxVal+1)
for _, num := range nums{
root := union.find(num)
arr[root] ++
rtn = max(rtn, arr[root])
}
return rtn
}
[LC952]按公因数计算最大组件大小的更多相关文章
- [Swift]LeetCode952. 按公因数计算最大组件大小 | Largest Component Size by Common Factor
Given a non-empty array of unique positive integers A, consider the following graph: There are A.len ...
- QuantLib 金融计算——基本组件之 InterestRate 类
目录 QuantLib 金融计算--基本组件之 InterestRate 类 InterestRate 对象的构造 一些常用的成员函数 如果未做特别说明,文中的程序都是 Python3 代码. Qua ...
- 【Java布局】FlowLayout布局时设定组件大小
默认的JPanel中,采用的是FlowLayout布局 下面是api中的定义: JPanel(boolean isDoubleBuffered) 创建具有 FlowLayout 和 ...
- ios UITextView 计算文字内容大小
先设置好 textView的内容文字,再调用以下代码,就能够得到文字内容的size,其中参数表示最大的size的尺寸,通常,高度应该不限制,宽度是控件的宽度. let newSize = statem ...
- 【转】Android绘制View的过程研究——计算View的大小
Android绘制View的过程研究——计算View的大小 转自:http://liujianqiao398.blog.163.com/blog/static/18182725720121023218 ...
- iOS计算缓存文件的大小
//获取缓存文件路径 -(NSString *)getCachesPath{ // 获取Caches目录路径 NSArray *paths = NSSearchPathForDirectoriesIn ...
- PHP计算某个目录大小的方法
用PHP来计算某个目录大小的方法. PHP CURL session COOKIE 可以调用系统命令,还可以这样: <?php function dirsize($dir) { @$dh ...
- python计算文件夹大小(linux du命令 简化版)
C盘又满了,怎么办?用了一些垃圾清理软件(或者bat脚本),但是还是不理想,那么具体哪些文件夹下面有巨大的文件呢?windows并不能通过详细信息看到每个文件夹的大小(PS:这里所谓的文件夹的大小是指 ...
- Python_计算文件夹大小
计算文件夹大小 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.path.join(path1[, path2[, ...]]) 将 ...
- ios 拉伸图片和计算文字的大小
一.拉伸图片 /** * 传入图片的名称,返回一张可拉伸不变形的图片 * * @param imageName 图片名称 * * @return 可拉伸图片 */ + (UIImage *)resiz ...
随机推荐
- Java序列化之ProtoStuff
知识点: ProtoStuff 是将结构数据转为字节流进行序列化的,优点是占用空间小,速度快,缺点是可读性差. ProtoStuff 是基于 ProtoBuf 发展而来的. 本文不讲那么多背景,直接上 ...
- Problem K. Master of Sequence(二分)
Problem K. Master of Sequence(二分) 补补题,人太菜了,一个题解看了两个小时才看明白(当然也可能是比赛的时候这个题完全不知道怎么下手qwq) 题目链接:http://ac ...
- 采用线性回归实现训练和预测(Python)
已知测得某块地,当温度处于15至40度之间时,数得某块草地上小花朵的数量和温度值的数据如下表所示.现在要来找出这些数据中蕴含的规律,用来预测其它未测温度时的小花朵的数量. 测得数据如下图所示: imp ...
- 【总结】线性dp的几种重要模型
当前点定义 \(f[i]\) :走到第 \(i\) 个点的方案数 / 最值. \(f[i][j]\) :走到第 \(i\) 个点,选了 \(j\) 个的答案. 依据题目的限制个数可以继续添加维数,也可 ...
- c语言里关于本地变量的一些规则
关于块的定义(自己的理解):就是☞{ }这个区域里面的东西以及" {} "这个符号的本身 ·本地的变量是定义在块内的 -->>1.它可以定义在函数的块内 void sw ...
- 如何在cnblogs的发文中使用自定义地址作为发文链接
要知道在cnblogs中发表内容后其默认的链接地址都是一串数字的形式,比如本篇的默认地址:https://www.cnblogs.com/xyz/p/18461898 但是为了让发表的内容更有个性化, ...
- 国内计算机领域相关的SCI和EI期刊,以及好中的SCI和EI期刊(不限国内外)
好中的: SCI刊: EI刊: EI会议: 参考: CCF发布计算领域高质量科技期刊分级目录 国内的: SCI-Expanded 1. <Journal of Computer Scie ...
- 4.4 Linux解压.zip格式的文件(unzip命令)
unzip 命令可以查看和解压缩 zip 文件.该命令的基本格式如下: [root@localhost ~]# unzip [选项] 压缩包名 此命令常用的选项以及各自的含义如表 1 所示. 选项 含 ...
- 一文彻底弄懂Spring Boot的启动过程
一,Spring Boot启动过程 1. 启动入口 Spring Boot 应用的启动入口通常是一个包含 @SpringBootApplication 注解的主类,并调用 SpringApplicat ...
- RT-Thread Studio刚新建工程后直接打开main.c编译就board.c里产生报错,解决办法
如题,RT-Thread Studio刚新建工程后直接打开main.c编译就产生报错. 具体为:刚新建了一个stm32F407ZGT6和一个STM32F103RCT6的工程,之后啥代码也没有改,直接打 ...