当前位置: 首页 > news >正文

leetcode 2658. 网格图中鱼的最大数目

题目如下
在这里插入图片描述
数据范围
在这里插入图片描述

使用并查集来做这道题。
其实按照题目的意思就是让我们求每一个联通的水域可以捞到的最大权值。
我们可以从前往后遍历这个二维数组只需要判断前一个水域和上一个水域是否和当前的(i, j)联通如果有则合并水域,同时用一个weight数组保存每一个联通的大水域的总权值也就是能捞到的鱼数量。

通过代码

class bin {
public:vector<int> path;vector<int> weight;bin(int n) {//这个n是没有必要的 博主原以为n m是一样大的想省点内存 后来发现不一样也不想改了 太懒了。。。。 path.resize(n * n);//二维数组转成一维地址就是 i * m + j i是行 j 是列 m是列数weight.resize(n * n);for (int i = 0; i < n * n; i++) {weight[i] = -1;path[i] = i;}}int find(int target) {if (path[target] == target)return target;path[target] = find(path[target]);//路径压缩return path[target];}void unio(int a, int b) {int a1 = find(a);int b1 = find(b);if (a1 == b1)return;path[b1] = a1;weight[a1] += weight[b1];}int max_fish(int n) {//这个n是没有必要的 博主原以为n m是一样大的想省点内存 后来发现不一样也不想改了 太懒了。。。。 int max = 0;for (int i = 0; i < n * n; i++) {if (weight[i] > max)max = weight[i];}return max;}
};
class Solution {
public:int findMaxFish(vector<vector<int>>& grid) {int n = grid.size();int m = grid[0].size();bin b(10);for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {b.weight[i * m + j] = grid[i][j];}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] != 0) {if (j > 0 && grid[i][j - 1] != 0) {b.unio(i * m + j - 1, i * m + j);}if (i > 0 && grid[i - 1][j] != 0) {b.unio((i - 1) * m + j, i * m + j);}}}}return b.max_fish(10);}
};
tips:无论先判断上面的水域联通还是左边的水域联通都可以 只需要判断上面和左边的情况就行因为下面和右边总会遍历到。如果愿意从后往前遍历同理只需判断下面和右边情况就行。

在这里插入图片描述

http://www.lryc.cn/news/513978.html

相关文章:

  • Java 集合 Collection、List、Set
  • 报错:nginx [emerg] open() etcnginxnginx.conf failed (2 No such file or directory)
  • 基于AI的运维资源调度:效率与智能的双重提升
  • 自动化办公 | 根据成绩进行自动评级
  • 纯血鸿蒙ArkUI线性布局详解
  • 小程序组件 —— 22 组件案例 - 轮播区域绘制
  • 如何判断一个学术论文是否具有真正的科研价值?ChatGPT如何提供帮助?
  • 【置顶】测试学习笔记整理
  • 新浪微博Java开发面试题及参考答案
  • 【SQL Server】教材数据库(1)
  • Windows系统下载、部署Node.js与npm环境的方法
  • SQL 总结
  • 设计一个基于Spring Boot开发的电商网站,部署在阿里云上
  • Java jni调用nnom rnn-denoise 降噪
  • C++软件设计模式之状态模式
  • Microsoft Visual Studio中的/MT, /MTd,/MD,/MDd分别是什么意思?
  • 谷粒商城项目125-spring整合high-level-client
  • 日期时间选择(设置禁用状态)
  • 基于SpringBoot的题库管理系统的设计与实现(源码+SQL+LW+部署讲解)
  • 钉钉h5微应用安卓报错error29 ios报错error3 加上报错52013,签名校验失败 (前端)
  • Vue.js组件开发-客户端如何限制刷新Token次数
  • Linux上安装jdk
  • Ardunio BLE keyboard 库的使用
  • django --递归查询评论
  • 【开源免费】基于SpringBoot+Vue.JS音乐网站(JAVA毕业设计)
  • SUBSTRING_INDEX()在MySQL中的用法
  • 对45家“AI+安全”产品/方案的分析
  • Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(1):Oracle Dataguard 概述
  • Pycharm 中 virtualenv、pipenv、conda 虚拟环境的用法
  • UNI-APP弹窗