当前位置: 首页 > news >正文

【Leetcode 952】按公因数计算最大组件大小

题干

给定一个由不同正整数的组成的非空数组 nums ,考虑下面的图:

  • 有 nums.length 个节点,按从 nums[0] 到 nums[nums.length - 1] 标记;
  • 只有当 nums[i] 和 nums[j] 共用一个大于 1 的公因数时,nums[i] 和 nums[j]之间才有一条边。

返回 图中最大连通组件的大小 。

解题思路

有连通查找可以想到并查集,公因数就常见思路gcd函数计算就行,常规题型的变体

思路拆解

  1. 并查集(Union-Find)

    • 使用并查集来管理连通组件。

    • 对于每个数,找到它的所有质因数,并将这些质因数与数本身合并到同一个集合中。

    • 最终,统计每个集合的大小,返回最大值。

  2. 质因数分解

    • 对于每个数,分解出它的所有质因数。

    • 将这些质因数作为桥梁,将具有相同质因数的数合并到同一个集合中。

源码

并查集模板

class UnionFind {
    int[] parent;
    int[] rank;

    public UnionFind(int n) {
        parent = new int[n];
        for (int i = 0; i < n; i++) {
            parent[i] = i;
        }
        rank = new int[n];
    }

    public void union(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]++;
            }
        }
    }

    public int find(int x) {
        if (parent[x] != x) {
            parent[x] = find(parent[x]);
        }
        return parent[x];
    }
}

 题解

 public int largestComponentSize(int[] nums) {
        int m = Arrays.stream(nums).max().getAsInt();
        UnionFind uf = new UnionFind(m + 1);
        for (int num : nums) {
            for (int i = 2; i * i <= num; i++) {
                if (num % i == 0) {
                    uf.union(num, i);
                    uf.union(num, num / i);
                }
            }
        }
        int[] counts = new int[m + 1];
        int ans = 0;
        for (int num : nums) {
            int root = uf.find(num);
            counts[root]++;
            ans = Math.max(ans, counts[root]);
        }
        return ans;
    }
}

相关文章:

  • LLM大模型学习资料整理
  • Java爬虫获取1688商品搜索API接口的实现指南
  • python | 两招解决第三方库安装难点
  • 如何画产品功能图、结构图
  • 进程与线程的区别与联系
  • Lazarus 旋转图片(TImage、TBitmap)
  • 我们来学HTTP/TCP -- 三次握手?
  • 2025 pwn_A_childs_dream
  • C++中 map的基本用法
  • 春招项目=图床+ k8s 控制台(唬人专用)
  • 委托构造函数与继承构造函数
  • nginx反向代理负载均衡
  • 数据结构 day02
  • 2024年度中国家居冠军榜公布,冠珠瓷砖荣获“行业领军品牌”
  • 深度学习(1)-简单神经网络示例
  • 力扣 乘积最大子数组
  • 【数据结构基础_链表】
  • 基因组数据分析中涉及基因结构的问题
  • 论文解读之DeepSeek R1
  • 【函数题】6-10 二分查找
  • 西安机场回应航站楼“水帘洞”事件:屋面排水系统被冰雹堵塞
  • 秦洪看盘|交易型资金收缩,释放短线压力
  • 一热就出汗 VS 热死都不出汗的人,哪个更健康?
  • 从黄土高原到黄浦江畔,澄城樱桃品牌推介会明日在上海举办
  • 德国新一届联邦政府宣誓就职
  • “穿越看洪武”,明太祖及其皇后像台北故宫博物院南园展出