LeetCode 947. 移除最多的同行或同列石头 并查集
发布日期:2021-05-11 03:46:43 浏览次数:10 分类:博客文章

本文共 2770 字,大约阅读时间需要 9 分钟。

������

���������������������������������������������������������(���������)"

������������������������������stones������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

  • ���������������������������������������������������������(x,y)������������������������������x������������x������y���������������y������������������������������������������������������������������������������������������������������(x,y)���������������������x������y������������������������������������������������������������������������������������������������������������������������������������������������������������

  • ������stones���������������������������������������������������������������������������������������������0���0���������0���������������������������������������������������������x���y������������������0~10^4���������������������������+10001������������10001���������������������������������������������������������������x���������x+10001������������������������y���������������������

  • ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Java���������������������������Java���c++���������������������������Java������������������������������������������������������

class Solution {    int parent[] = new int[20005];    int vis[] = new int[20005];    public int removeStones(int[][] stones) {        int ans = 0;        for (int i = 0; i < 20005; i++){            parent[i] = i;            vis[i] = 0;        }        for (int[] stone : stones) {            //(x,y)������������������������x���������������������������������y���            //���������������������������(x,y)������������������x������������y���            //������������������������������������������������������������������������            //������+10001���������������������������������������������������������            //���������������x+10001������������������������y���������������������            union(stone[0] + 10001, stone[1]);            vis[stone[0] + 10001] = 1;            vis[stone[1]] = 1;        }        for(int i = 0; i < 20005; i++) {            if(vis[i] == 1 && parent[i] == i) ans++;        }        return stones.length - ans;    }    public void union(int x, int y) {        int fx = find(x);        int fy = find(y);        if (fx != fy) parent[fy] = fx;    }    public int find(int x) {        while (parent[x] != x) x = parent[x];        return x;    }}
上一篇:一些JavaSE学习过程中的思路整理(二)(主观性强,持续更新中...)
下一篇:一些JavaSE学习过程中的思路整理(一)(主观性强,持续更新中...)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月19日 14时12分41秒