并查集 - 由斜杠划分区域
题目链接
求划分区域的个数,也就是求连通分量的个数,将每个单元格划分为4个部分,分别根据空格、斜杠、反斜杠进行合并。
class UnionFind{public:UnionFind(int n): count(n), parent(n), size(n, 1) {iota(parent.begin(), parent.end(), 0);}int find(int x) {return x == parent[x] ? x : find(parent[x]);}bool unite(int x, int y) {x = find(x);y = find(y);if (x == y) {return false;}if (size[x] < size[y]) {swap(x, y);}parent[y] = x;size[x] += size[y];--count; return true;}public:int count;vector<int> parent;vector<int> size;
};class Solution {public:int regionsBySlashes(vector<string>& grid) {int n = grid.size();UnionFind uf(4 * n * n);for (int i = 0; i < n; ++i) {for (int j = 0; j < n; ++j) {int idx = (i * n + j) * 4;if (grid[i][j] == ' ') { // 0 1 2 3uf.unite(idx, idx+1);uf.unite(idx+1, idx+2);uf.unite(idx+2, idx+3);}else if (grid[i][j] == '/') { // 1 2 ; 0 3uf.unite(idx, idx+3);uf.unite(idx+1, idx+2);}else { // 0 1 ; 2 3uf.unite(idx, idx+1);uf.unite(idx+2, idx+3);}if (j + 1 < n) {uf.unite(idx+1, idx+7);}if (i + 1 < n) {uf.unite(idx+2, idx+n*4);}}}return uf.count;}
};
并查集 - 由斜杠划分区域相关推荐
- 【每日一题】 959. 由斜杠划分区域
[每日一题] 959. 由斜杠划分区域 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /. ...
- 959. 由斜杠划分区域
链接:959. 由斜杠划分区域 题解: 为了解决本题,我们把 一个格子 划分成 4 个区域.如果是 左划线 "/",即对应了下图的 0️⃣ 和 ③ 连通.① 和 ② 连通:如果是 ...
- leetcode 959. 由斜杠划分区域(并查集)
在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /.\ 或空格构成.这些字符会将方块划分为一些共边的区域. (请注意,反斜杠字符是转义的,因此 \ 用 &quo ...
- 每日一题:leetcode959.由斜杠划分区域
题目描述 题目分析 仔细分析这道题以后虽然觉得可能要转化为图之类的,但是完全没有具体的想法,因为每个格子都有三种情况,这三种情况的不同的组合又会产生不同的结果. 发现找不到编码转化为图以后,我分析了一 ...
- leetcode —— 959. 由斜杠划分区域
在由 1 x 1 方格组成的 N x N 网格 grid 中,每个 1 x 1 方块由 /.\ 或空格构成.这些字符会将方块划分为一些共边的区域. (请注意,反斜杠字符是转义的,因此 \ 用 &quo ...
- LeetCode 1697. 检查边长度限制的路径是否存在(排序+并查集)
文章目录 1. 题目 2. 解题 1. 题目 给你一个 n 个点组成的无向图边集 edgeList ,其中 edgeList[i] = [ui, vi, disi] 表示点 ui 和点 vi 之间有一 ...
- LeetCode 685. 冗余连接 II(并查集)
1. 题目 在本问题中,有根树指满足以下条件的有向图.该树只有一个根节点,所有其他节点都是该根节点的后继. 每一个节点只有一个父节点,除了根节点没有父节点. 输入一个有向图,该图由一个有着N个节点 ( ...
- LeetCode 886. 可能的二分法(着色DFS/BFS/拓展并查集)
文章目录 1. 题目 2. 解题 2.1 DFS 2.2 BFS 2.3 并查集 1. 题目 给定一组 N 人(编号为 1, 2, -, N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢 ...
- LeetCode 684. 冗余连接(并查集)
1. 题目 在本问题中, 树指的是一个连通且无环的无向图. 输入一个图,该图由一个有着N个节点 (节点值不重复1, 2, -, N) 的树及一条附加的边构成.附加的边的两个顶点包含在1到N中间,这条附 ...
最新文章
- Java8 新的 try-with-resources 语句,自动资源释放
- 【记录一个问题】cuda核函数可能存在栈溢出,导致main()函数退出后程序卡死30秒CUDA...
- ionic3学习之Android平台打包方式
- Linux基础之文件管理三兄弟(cp、mv、rm)
- SAP附件清单的调用
- 请先设置tkk_物联卡apn设置机型大全!!物联卡连不上4G、网速慢?推荐你看这片文...
- 机械秒表的使用方法_让console.log()不再是你的唯一选项js日志输出6种方法
- Ubuntu 16.04中的Dock的应用顺序调整
- 利用python构建信用卡评分
- JQ ajax 请求事件处理
- C# LeetCode刷题 - LeetCode 148. Sort List 解题报告(归并排序小结)
- 京东云安装docker
- gfortran在linux下安装
- 慎投:这两本期刊被剔除SCI/SSCI, 11月WOS数据库已更新~
- Vue3和码上掘金实现猜数字小游戏
- SaaS云服务应用的访问安全性分析
- Markdown mermaid种草(9)_ 用户体验地图
- 百度地图离线化(API v=1.3)
- 计算机网络中常用设备处于脱机状态,win7网络正常网页提示处于脱机状态该怎么解决?...
- 程序员最爱 Mac、JS 是最热门技术