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

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

这道题本质就是 323. Number of Connected Components in an Undirected Graph。

 

DFS O(n^2)

一模一样, 只不过图要自己构建而已。

class Solution {public:    vector
> adj; int removeStones(vector
>& stones) { int n=stones.size(); adj.resize(n,list
()); for (int i=0;i
visited(n,false); for (int i=0;i
&visited){ if (visited[i]) return; visited[i] = true; for (auto x:adj[i]){ dfs(x,visited); } }};

 

Union Find O(n^2),两两union n^2

class Solution {public:      vector
parent; int removeStones(vector
>& stones) { int n=stones.size(); parent.resize(n,-1); for (int i=0;i
parent[root2]){ parent[root2] += parent[root1]; parent[root1] = root2; }else{ parent[root1] += parent[root2]; parent[root2] = root1; } } int Find(int x){ if (parent[x]<0) return x; return parent[x]=Find(parent[x]); }};

 

Union Find (Optimized)

Solution里的很取巧的做法。横坐标纵坐标都一起union,这样只要遍历stones一次即可。这里将纵坐标+1000,就能简单区分横纵坐标。

时间复杂度 由于union by size,O(nlogn)。如果用union by rank来写,可以 O(n*α(n))。

class Solution {public:       vector
parent; int removeStones(vector
>& stones) { int n=stones.size(); parent.resize(20000,-1); for (auto stone:stones){ int x=stone[0], y=stone[1]; Union(x,y+10000); } unordered_set
s; for (auto stone:stones){ s.insert(Find(stone[0])); } return n-s.size(); return 0; } void Union(int x, int y){ // union by size int root1=Find(x), root2=Find(y); if (root1==root2) return; if (parent[root1]>parent[root2]){ parent[root2] += parent[root1]; parent[root1] = root2; }else{ parent[root1] += parent[root2]; parent[root2] = root1; } } int Find(int x){ if (parent[x]<0) return x; return parent[x]=Find(parent[x]); }};

 

转载于:https://www.cnblogs.com/hankunyan/p/10984580.html

你可能感兴趣的文章
Html body的滚动条禁止与启用
查看>>
Tengine新增nginx upstream模块的使用
查看>>
多媒体工具Mediainfo
查看>>
1-小程序
查看>>
CentOS图形界面和命令行切换
查看>>
HTML5通信机制与html5地理信息定位(gps)
查看>>
Mind_Manager_2
查看>>
手动升级 Confluence - 规划你的升级
查看>>
汽车常识全面介绍 - 悬挂系统
查看>>
电子政务方向:We7.Cloud政府云门户
查看>>
虚拟机Centos7连接Internet
查看>>
ansible 基本操作(初试)
查看>>
更改tomcat的根目录路径
查看>>
51nod 1292 字符串中的最大值V2(后缀自动机)
查看>>
加快ALTER TABLE 操作速度
查看>>
学习笔记之软考数据库系统工程师教程(第一版)
查看>>
基本网络概念
查看>>
将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1 RC 1
查看>>
js提交图片转换为base64
查看>>
学习CodeIgniter框架之旅(二)继承自定义类
查看>>