​LeetCode解法汇总5-正则表达式匹配​

news/2024/7/3 3:07:37

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。

示例:

输入:
[
  [0,2,1,0],
  [0,1,0,1],
  [1,1,0,1],
  [0,1,0,1]
]
输出: [1,2,4]

提示:

  • 0 < len(land) <= 1000
  • 0 < len(land[i]) <= 1000

解题思路:

* 解题思路:

* 因为担心递归遍历会导致堆栈溢出,所以采取的队列的方式。

* 遍历每个点,如果是海域则加入到queue中,并且记录size=1,然后取出queue中的头部,每个点都向周围8个方向探测,如果也为海域,则也加入到queue中,并且size+1;

* 最后把size加入到record中。

代码:

class Solution_MS_1619
{
public:
    static constexpr int directions[8][2] = {{1, 0}, {1, -1}, {0, -1}, {-1, -1}, {-1, 0}, {-1, 1}, {0, 1}, {1, 1}};

    vector<int> pondSizes(vector<vector<int>> &land)
    {
        vector<int> record;
        for (int y = 0; y < land.size(); y++)
        {
            for (int x = 0; x < land[0].size(); x++)
            {
                if (land[y][x] != 0)
                {
                    continue;
                }
                int size = 1;
                queue<pair<int, int>> qu;
                qu.push(make_pair(x, y));
                land[y][x] = 1;
                while (!qu.empty())
                {
                    pair<int, int> top = qu.front();
                    qu.pop();
                    for (int i = 0; i < 8; i++)
                    {
                        int nx = top.first + directions[i][0];
                        int ny = top.second + directions[i][1];
                        if (nx < 0 || ny < 0 || nx >= land[0].size() || ny >= land.size())
                        {
                            continue;
                        }
                        if (land[ny][nx] == 0)
                        {
                            size++;
                            land[ny][nx] = 1;
                            qu.push(make_pair(nx, ny));
                        }
                    }
                }
                record.push_back(size);
            }
        }
        sort(record.begin(), record.end());
        return record;
    }
};


http://lihuaxi.xjx100.cn/news/1267409.html

相关文章

JAVA文件传输(论文+源代码)

随着计算机网络技术的飞速发展,客户/服务C/S(Client/Sersver)结构成为开发FTP的网络编程结构,Java作为Web应用程序的开 发技术也为更多的人所采用。 起初, FTP并不是应用于IP网络上的协议,而是ARPANET网络中计算机间的文件传输协议, ARPANET是美国国防部组建的老网络,于…

FBM207C RH917GY将相关调节系统打到手动状态,必要时到现场进行调节

​ FBM207C RH917GY将相关调节系统打到手动状态&#xff0c;必要时到现场进行调节 FBM207C RH917GY将相关调节系统打到手动状态&#xff0c;必要时到现场进行调节 随着自动化水平的提高&#xff0c;dcs控制系统(集散控制系统)逐渐代替了常规仪表&#xff0c;其优越性已被广大操…

【Python】字符串 合并 切片 转换 格式化 拆分组合 find index count strip

2.2 字符串 可用单引号、双引号、三引号。 字符串是一种不可变序列。 1&#xff09;合并、重复 result "hello" * 3 "world" * 2 print(result) # 输出&#xff1a;"hellohellohelloworldworld"2&#xff09;切片、索引 索引&#xff1a;从0…

极致呈现系列之:Echarts旭日图的绚丽奇观

目录 什么是旭日图旭日图的特性及应用场景旭日图的特性应用场景 旭日图常用的配置项创建基本的旭日图自定义旭日图样式样式旭日图的高级应用 什么是旭日图 旭日图是一种可视化图表&#xff0c;用于展示层级结构和层级之间的关系。它以一个圆形为基础&#xff0c;由多层的环形图…

闪亮登场!在树莓派上点亮LED灯的简单详细方法

文章目录 树莓派开发与STM32开发的比较原理图以及树莓派引脚展示点灯步骤读取树莓派布局 树莓派开发与STM32开发的比较 树莓派和STM32都是常用的嵌入式设备&#xff0c;都可以使用GPIO来控制LED灯。它们的点灯方式和使用的编程语言以及开发环境略有不同: 相同点&#xff1a; 控…

旷视研究院获 CVPR 2023 自动驾驶国际挑战赛 OpenLane Topology 赛道冠军

近日&#xff0c;为期三个月的 CVPR 2023 自动驾驶国际挑战赛比赛结果揭晓。旷视研究院在OpenLane Topology 赛道中击败 30 余支国内外队伍&#xff0c;夺得冠军。 自动驾驶技术已经渗透到人们的日常生活中&#xff0c;但是传统的感知方法仍不能满足大家对 L5 级自动驾驶的追逐…

Vue 中利用 new Date() 获取当前时间的方法详解

系列文章目录 文章目录 系列文章目录前言一、使用 new Date() 方法获取当前时间二、常见的时间格式化方法1.格式化为指定格式的字符串2.获取时间的各个部分 三、常见的时间格式化方法总结 前言 在 Vue 开发中&#xff0c;获取当前时间是一项常见的需求。而利用 JavaScript 中的…

Mac中idea常用快捷键

1.commandF 在当前文件进行文本查找 2.commandshiftF 进行工程和模块中的文件搜索 3.command/ 对代码进行注释&#xff0c;并且自动移动到下一行 4.optioncommandL 进行格式化代码 5.双击shift : 全局搜索(类) 6.commandoption⬅️ : 返回上一步代码 7.commando…