当前位置:网站首页>【952. 按公因数计算最大组件大小】
【952. 按公因数计算最大组件大小】
2022-07-31 00:40:00 【千北@】
来源:力扣(LeetCode)
描述:
给定一个由不同正整数的组成的非空数组 nums
,考虑下面的图:
- 有
nums.length
个节点,按从nums[0]
到nums[nums.length - 1]
标记; - 只有当
nums[i]
和nums[j]
共用一个大于 1 的公因数时,nums[i]
和nums[j]
之间才有一条边。
返回 图中最大连通组件的大小 。
示例 1:
输入:nums = [4,6,15,35]
输出:4
示例 2:
输入:nums = [20,50,9,63]
输出:2
示例 3:
输入:nums = [2,3,6,7,4,12,21,39]
输出:8
提示:
- 1 <= nums.length <= 2 * 104
- 1 <= nums[i] <= 105
- nums 中所有值都 不同
方法:并查集
代码:
class UnionFind {
public:
UnionFind(int n) {
parent = vector<int>(n);
rank = vector<int>(n);
for (int i = 0; i < n; i++) {
parent[i] = i;
}
}
void uni(int x, int y) {
int rootx = find(x);
int rooty = find(y);
if (rootx != rooty) {
if (rank[rootx] > rank[rooty]) {
parent[rooty] = rootx;
} else if (rank[rootx] < rank[rooty]) {
parent[rootx] = rooty;
} else {
parent[rooty] = rootx;
rank[rootx]++;
}
}
}
int find(int x) {
if (parent[x] != x) {
parent[x] = find(parent[x]);
}
return parent[x];
}
private:
vector<int> parent;
vector<int> rank;
};
class Solution {
public:
int largestComponentSize(vector<int>& nums) {
int m = *max_element(nums.begin(), nums.end());
UnionFind uf(m + 1);
for (int num : nums) {
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
uf.uni(num, i);
uf.uni(num, num / i);
}
}
}
vector<int> counts(m + 1);
int ans = 0;
for (int num : nums) {
int root = uf.find(num);
counts[root]++;
ans = max(ans, counts[root]);
}
return ans;
}
};
执行用时:196 ms, 在所有 C++ 提交中击败了71.01%的用户
内存消耗:75.2 MB, 在所有 C++ 提交中击败了27.54%的用户
author:LeetCode-Solution
边栏推荐
- Kotlin协程:协程上下文与上下文元素
- How to install joiplay emulator rtp
- Common network status codes
- A complete guide to avoiding pitfalls for the time-date type "yyyy-MM-dd HHmmss" in ES
- xss bypass: prompt(1)
- MySQL笔记下
- Adding, deleting, modifying and checking the foundation of MySQL
- 牛客网刷题训练(四)
- WEB Security Basics - - - Vulnerability Scanner
- 神经网络(ANN)
猜你喜欢
随机推荐
SWM32 Series Tutorial 6 - Systick and PWM
【Yugong Series】July 2022 Go Teaching Course 013-Constants, Pointers
WEB安全基础 - - -漏洞扫描器
网络常用的状态码
神经网络(ANN)
Jmeter参数传递方式(token传递,接口关联等)
The difference between truncate and delete in MySQL database
ES6中 async 函数、await表达式 的基本用法
Filter (Filter)
MySQL notes under
(五)fastai应用
.NET Cross-Platform Application Development Hands-on Tutorial | Build a Kanban-style Todo App with Uno Platform
MySql数据恢复方法个人总结
Redis learning
MySQL master-slave replication and read-write separation script - pro test available
Method for deduplication of object collection
background has no effect on child elements of float
SereTOD2022 Track2代码剖析-面向半监督和强化学习的任务型对话系统挑战赛
software development design process
MySQL数据库面试题总结(2022最新版)