日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LintCode 434. 岛屿的个数II(并查集)

發布時間:2024/7/5 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LintCode 434. 岛屿的个数II(并查集) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題

1. 題目

給定 n, m, 分別代表一個二維矩陣的行數和列數, 并給定一個大小為 k 的二元數組A.
初始二維矩陣全0.
二元數組A內的k個元素代表k次操作, 設第 i 個元素為 (A[i].x, A[i].y), 表示把二維矩陣中下標為A[i].x行A[i].y列的元素由海洋變為島嶼.
問在每次操作之后, 二維矩陣中島嶼的數量. 你需要返回一個大小為k的數組.

樣例 1: 輸入: n = 4, m = 5, A = [[1,1],[0,1],[3,3],[3,4]] 輸出: [1,1,2,2] 解釋: 0. 00000000000000000000 1. 00000010000000000000 2. 01000010000000000000 3. 01000010000000000010 4. 01000010000000000011樣例 2: 輸入: n = 3, m = 3, A = [[0,0],[0,1],[2,2],[2,1]] 輸出: [1,1,2,2] 注意事項 設定0表示海洋, 1代表島嶼, 并且上下左右相鄰的1為同一個島嶼.

https://www.lintcode.com/problem/number-of-islands-ii/description

2. 解題

  • 并查集求解連通分量個數
/*** Definition for a point.* struct Point {* int x;* int y;* Point() : x(0), y(0) {}* Point(int a, int b) : x(a), y(b) {}* };*/class Solution { public:/*** @param n: An integer* @param m: An integer* @param operators: an array of point* @return: an integer array*/vector<int> f;int island = 0;void merge(int a, int b){int fa = find(a), fb = find(b);if(fa != fb){island--;f[fa] = fb;}}int find(int a){if(a == f[a]) return a;return f[a] = find(f[a]);}vector<int> numIslands2(int n, int m, vector<Point> &operators) {// write your code heref.resize(n*m);for(int i = 0; i < m*n; ++i)f[i] = i;unordered_set<int> landmark;//保存陸地,壓縮為一維vector<vector<int>> dir = {{1,0},{0,1},{-1,0},{0,-1}};vector<int> ans(operators.size());for(int i = 0; i < operators.size(); ++i){int x = operators[i].x;int y = operators[i].y;int idx = m*x + y;if(!landmark.count(idx)){ //新的陸地landmark.insert(idx);island++;for(int k = 0; k < 4; ++k){ //周圍的地方int nx = x+dir[k][0];int ny = y+dir[k][1];int nidx = m*nx+ny;if(nx>=0 && nx <n && ny>=0 && ny < m && landmark.count(nidx)){ // 新陸地的四周在界內,且是陸地merge(idx, nidx);// 合并}}}ans[i] = island;}return ans;} };

853 ms C++


我的CSDN博客地址 https://michael.blog.csdn.net/

長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!

總結

以上是生活随笔為你收集整理的LintCode 434. 岛屿的个数II(并查集)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。