一开始想法单纯,试了试并查集+GCD,果断TLE 73

实在想不出比O(n^2)更好的算法,所以偷瞄了大神的代码,如下

 1 #include <iostream>
 2 #include <set>
 3 #include <vector>
 4 #define _for(i,a,b) for(int i = (a);i < (b);i ++)
 5
 6 using namespace std;
 7
 8 const int maxn = 100039;
 9 set<int> g[maxn];
10 vector<int> f[maxn];
11 bool fvis[maxn] {0},gvis[maxn] {0};
12 class Solution
13 {
14     public:
15         void demo(int x,int id)
16         {
17             for(int i = 2;i*i <= x;i ++)
18             {
19                 if(!(x%i))
20                 {
21                     f[id].push_back(i);//factor in vector
22                     g[i].insert(id);//index in set
23                     while(!(x%i)) x /= i;
24                 }
25             }
26             if(x>1)
27             {
28                 f[id].push_back(x);//factor in vector
29                 g[x].insert(id);//index in set
30             }
31         }
32         void dfs(int id,set<int> &S)
33         {
34             fvis[id] = true;
35             S.insert(id);
36             for(auto fac:f[id])
37             {
38                 if(gvis[fac]) continue;
39                 gvis[fac] = true;
40                 for(auto fidx:g[fac])
41                 {
42                     if(fvis[fidx]) continue;
43                     S.insert(fidx);
44                     dfs(fidx,S);
45                 }
46             }
47         }
48         int largestComponentSize(vector<int>& A)
49         {
50             _for(i,0,A.size())
51                 demo(A[i],i);
52             int rnt = 1;
53             _for(i,0,A.size())
54             {
55                 set<int> tmp;
56                 if(fvis[i]) continue;
57                 dfs(i,tmp);
58                 rnt = max(rnt,(int)tmp.size());
59             }
60             return rnt;
61         }
62 };
63 int main()
64 {
65     Solution obj;
66     vector<int> A {2,3,6,7,4,12,21,39};
67     cout << obj.largestComponentSize(A) << endl;
68     return 0;
69 }

稍微解释一下,大神搞了一个双射,f里装的都是A[i]的因子,g里装的都是因子的下标,比如g[2]里装的就都是偶数的A的元素的下标,然后dfs vector f,走一遍因子,再根据因子从set g里找下标,每找到一个下标就装到set里,这其实就是一个"集",最后看看集的大小就是组件的大小,最大的集就是最大组件的大小

转载于:https://www.cnblogs.com/Asurudo/p/10054548.html

Leetcode-952 Largest Component Size by Common Factor(按公因数计算最大组件大小)相关推荐

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

    952. 按公因数计算最大组件大小 [质因数+并查集]一开始我想的是两两用gcd查公因数,如果不是1就用并查集合并,但是复杂度O(n * n * gcd),O(gcd) = O(logm),所以显然是 ...

  2. 952. 按公因数计算最大组件大小 : 枚举质因数 + 并查集运用题

    题目描述 这是 LeetCode 上的 952. 按公因数计算最大组件大小 ,难度为 困难. Tag : 「数学」.「并查集」 给定一个由不同正整数的组成的非空数组 nums,考虑下面的图: 有  n ...

  3. LeetCode每日一题——952. 按公因数计算最大组件大小

    参考资料: https://leetcode.cn/problems/largest-component-size-by-common-factor/solution/an-gong-yin-shu- ...

  4. leetcode 952. 按公因数计算最大组件大小 (素数筛法+并查集)

    题意: 给一串数,每一个数代表图的一个节点,然后两个数之间有除1之外的公因数表示这两个节点之间有边相连,求最大连通图. 做法: 如果平方找数两两之间是否存在公因数肯定超时,如果要判断两个数是否有公因数 ...

  5. LeetCode——Kth Largest Element in an Array

    LeetCode--Kth Largest Element in an Array Question Find the kth largest element in an unsorted array ...

  6. LeetCode 84. Largest Rectangle in Histogram

    LeetCode 84. Largest Rectangle in Histogram Solution1:我的答案 循环里头套了一个动态规划,缺点是当heights个数或最大高度多高时会很耗时间!! ...

  7. LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字

    2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Largest Number(求整型数组中各元素可拼合成的最大数字) 2.题目地址 https://leetco ...

  8. 【回文串10】LeetCode 479. Largest Palindrome Product

    LeetCode 479. Largest Palindrome Product 本博客转载自:http://www.cnblogs.com/grandyang/p/7644725.html Solu ...

  9. [LeetCode]179. Largest Number

    [LeetCode]179. Largest Number 题目描述 解题思路 求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前 需要考虑的是对于不同位数 ...

最新文章

  1. java 线程池 分组_JAVA面试题解惑系列(十)——话说多线程
  2. android n AES加密,AndroidP AES 加密适配
  3. MySQL之长连接、短连接、连接池(转载:http://www.ywnds.com/?p=9801)
  4. input子系统基础之按键2——input设备应用层编程实践
  5. 泰克示波器查眼图_泰克示波器自带上位机软件功能介绍,了解一下
  6. linux mount 原文件夹,window文件夹mount挂载Linux
  7. 将你的掘金小册制作成一整本PDF
  8. matlab随机生成点图,matlab随机生成散点图
  9. Ubuntu 20.04 上安装使用 ibus-rime(超实用)
  10. 2012冬-我想和生活谈谈
  11. 【Matlab】变分法求控制器(无约束)
  12. 1.学生党如何查找文献书籍
  13. csgo社区服务器维护2021,CSGO国际服启动软件
  14. webstorm热更新
  15. 《零基础学HTML5+CSS3(全彩版)》读书笔记
  16. 微信小程序,后台数据返回的数据带有回车符,对文本进行回车符处理
  17. 数据库中的表类型和字段类型
  18. 基于反事实的因果推理Causal inference based on counterfactuals--一万六千字文献详细解读(因果关系的推理应用)【全文总结】
  19. 计算机控制技术课程配套教材习题解答(第4、5章)
  20. Python多线程爬虫实例

热门文章

  1. 现在有很多年轻人都不想打工
  2. OpenZeppelin集成Truffle编写健壮安全的合约
  3. Qt4_用DOM读取XML
  4. Qt4_在Qt设计师中集成自定义窗口部件
  5. TCP/IP参考模型和五层参考模型
  6. android新对象锁,Android的线程和对象锁定
  7. 使用备份和还原以及SMB协议将SQL数据库从Windows迁移到Linux
  8. SQL Server 2016中的本机JSON支持
  9. azure db 设置时区_使用Azure Cosmos DB开始您的旅程
  10. 如何在SQL Server中处理过多的SOS_SCHEDULER_YIELD等待类型值