694. Number of Distinct Islands

2024-02-27 00:08
文章标签 number distinct islands 694

本文主要是介绍694. Number of Distinct Islands,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发现这些题目还是套路深啊!完全不适合我这种不长脑子的人。
题目要求的是不一样的陆地,形状不同,面积不同等。 那怎么去确定不同那?
当确定了开始点后,下一步就是遍历四周是不是陆地。那遍历四周都是变换x,y的左边。比如上下左右的顺序。可以把这点陆地的位置相对于起始点的位置的相对位置记录下。
然后把这些形状push到unorder_set里。 同样的set就会被hash掉。

class Solution {
public:
    
    vector<pair<int, int>> bfs(int i, int j, vector<vector<int>>& grid)
    {
        queue<pair<int, int>> myqueue;
        vector<int> direcX{-1, 0, 1, 0};
        vector<int> direcY{0,  1, 0, -1};
        int row = grid.size();
        int col = grid[0].size();
        vector<pair<int, int>> v;
        int startX = i;
        int startY = j;
        
        myqueue.push({i, j});
        
        while(!myqueue.empty())
        {
            pair<int, int> cur = myqueue.front();
            myqueue.pop();
            
            int x = cur.first;
            int y = cur.second;
            
            for(int i=0;i<4;i++) {
                int newx = x + direcX[i];
                int newy = y + direcY[i];
                
                if(newx>=0 && newx < row && newy>=0 && newy < col && grid[newx][newy] == 1) {
                    v.push_back({newx-startX, newy-startY});
                    grid[newx][newy] =-1;
                    myqueue.push({newx, newy});
                }
            }
        }
        
        return v;
    }
    
    int numDistinctIslands(vector<vector<int>>& grid) {
        set<vector<pair<int, int>>> ret;
        vector<pair<int, int>> tmp;
        int row = grid.size();
        int col = grid[0].size();
        
        for(int i =0; i<row; i++) {
            for(int j =0; j<col; j++) {
                if(grid[i][j] == 1){
                    grid[i][j] = -1;
                    tmp = bfs(i, j, grid);
                    ret.insert(tmp);
                }
            }
        }
        
        return ret.size();
    }
};

这篇关于694. Number of Distinct Islands的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/750598

相关文章

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

详解MySQL中DISTINCT去重的核心注意事项

《详解MySQL中DISTINCT去重的核心注意事项》为了实现查询不重复的数据,MySQL提供了DISTINCT关键字,它的主要作用就是对数据表中一个或多个字段重复的数据进行过滤,只返回其中的一条数据... 目录DISTINCT 六大注意事项1. 作用范围:所有 SELECT 字段2. NULL 值的特殊处

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

【Hdu】Minimum Inversion Number(逆序,线段树)

利用线段树在nlogn的时间复杂度内求一段数的逆序。 由于给的序列是由0 ~ n -1组成的,求出初始的逆序之后可以递推出移动之后的逆序数。 #include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const in

【JavaScript】基本数据类型与引用数据类型区别(及为什么String、Boolean、Number基本数据类型会有属性和方法?)

基本数据类型   JavaScript基本数据类型包括:undefined、null、number、boolean、string。基本数据类型是按值访问的,就是说我们可以操作保存在变量中的实际的值。 1)基本数据类型的值是不可变的 任何方法都无法改变一个基本类型的值,比如一个字符串: var name = "change";name.substr();//hangconsole.log

ORA-24067: exceeded maximum number of subscribers for queue ADMIN.SMS_MT_QUEUE

临时处理办法: delete from aq$_ss_MT_tab_D;delete from aq$_ss_MT_tab_g;delete from aq$_ss_MT_tab_h;delete from aq$_ss_MT_tab_i;delete from aq$_ss_MT_tab_p;delete from aq$_ss_MT_tab_s;delete from aq$

SQLSERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER

SQL SERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER 前言 本文意于用实例数据帮助理解SQL SERVER排名函数RANK,DENSE_RANK,NTILE,ROW_NUMBER。 准备工作 创建测试表:   ? 1 2 3 4 5 create table test( id int identity(1,1)