博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 947. Most Stones Removed with Same Row or Column
阅读量:5216 次
发布时间:2019-06-14

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

947. Most Stones Removed with Same Row or Column

Find connected components, with some specific connected component, the remove count is Num of elements - 1.

First method is to use BFS.

class Solution {        public int removeStones(int[][] stones) {            int N = stones.length;            int[] visited = new int[N];            int ret = 0;            Queue
q = new LinkedList<>(); for (int i = 0; i < N; ++i) { if (visited[i] == 0) { q.add(i); } int tmp = 0; while (!q.isEmpty()) { Integer pos = q.poll(); int x = stones[pos][0], y = stones[pos][1]; if (visited[pos] == 1) continue; tmp += 1; visited[pos] = 1; for (int j = 0; j < N; ++j) { if (visited[j] == 0 && (stones[j][0] == x || stones[j][1] == y)) { q.add(j); } } } ret += (tmp != 0 ? (tmp - 1) : 0); } return ret; } }

Also, for finding connected components problem. Union-find algorithm is an efficient algorithm.

And for simplicity, we only use path compression trick.

suppose x is connected components size

result is N - x

class Solution {        public int removeStones(int[][] stones) {            DSU dsu = new DSU(20001);            for (int i = 0; i < stones.length; ++i) {                dsu.union(stones[i][0], 10000 + stones[i][1]);            }            Set
seen = new HashSet<>(); for (int i = 0; i < stones.length; ++i) { seen.add(dsu.find(stones[i][0])); } return stones.length - seen.size(); } static public class DSU { int[] parents; public DSU(int N) { parents = new int[N]; for (int i = 0; i < N; ++i) parents[i] = i; } public int find(int x) { if (x != parents[x]) { parents[x] = find(parents[x]); } return parents[x]; } public void union(int x, int y) { parents[find(x)] = parents[find(y)]; } } }

转载于:https://www.cnblogs.com/exhausttolive/p/10555956.html

你可能感兴趣的文章
18款在线代码片段测试工具
查看>>
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>
在SQL中怎么把一列字符串拆分为多列
查看>>
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
javascript获取textarea中所选文本的开始位置、结束位置和选择的文本
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>
JSch - Java实现的SFTP(文件上传详解篇)
查看>>
一些注意点
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
C#修饰符
查看>>
20.核心初始化之异常向量表
查看>>
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
js 封装获取元素的第一个元素
查看>>