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

力扣-图论-13【算法学习day.63】

前言

###我做这类文章一个重要的目的还是给正在学习的大家提供方向和记录学习过程(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴!!!


习题

1.水域大小

题目链接:面试题 16.19. 水域大小 - 力扣(LeetCode)

分析:简单的dfs

class Solution {int[][] land;int n,m;int[][] flag;ArrayList<Integer> list = new ArrayList<>();int flag2 = 0;public int[] pondSizes(int[][] land) {this.land = land;n = land.length;m = land[0].length;flag = new int[n][m];for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){if(flag[i][j]==0&&land[i][j]==0){flag2 = 0;recursion(i,j);//  System.out.println("------------------------");list.add(flag2);}}}flag2 = 0;int[] ans = new int[list.size()];for(int a:list){ans[flag2++] = a;}Arrays.sort(ans);return ans;}public void recursion(int x,int y){// System.out.println(x+"          "+y);flag[x][y] = 1;flag2++;if(x+1<n&&land[x+1][y]==0&&flag[x+1][y]==0){recursion(x+1,y);}if(x-1>=0&&land[x-1][y]==0&&flag[x-1][y]==0){recursion(x-1,y);}if(y+1<m&&land[x][y+1]==0&&flag[x][y+1]==0){recursion(x,y+1);}if(y-1>=0&&land[x][y-1]==0&&flag[x][y-1]==0){recursion(x,y-1);}if(x+1<n&&y+1<m&&land[x+1][y+1]==0&&flag[x+1][y+1]==0){recursion(x+1,y+1);}if(x+1<n&&y-1>=0&&land[x+1][y-1]==0&&flag[x+1][y-1]==0){recursion(x+1,y-1);}if(x-1>=0&&y+1<m&&land[x-1][y+1]==0&&flag[x-1][y+1]==0){recursion(x-1,y+1);}if(x-1>=0&&y-1>=0&&land[x-1][y-1]==0&&flag[x-1][y-1]==0){recursion(x-1,y-1);}}
}

2.主题空间

题目链接:LCS 03. 主题空间 - 力扣(LeetCode)

题面:

分析:dfs,只不过多一些考虑情况 

代码:

class Solution {int n,m;int ans = 0;char[][] map;int[][] flag;int flag2 = 0;int islian = 0;public int largestArea(String[] grid) {n = grid.length;m = grid[0].length();map = new char[n][m];flag = new int[n][m];int count = 0;for(String str:grid){map[count++] = str.toCharArray();}for(int i = 1;i<n-1;i++){for(int j = 1;j<m-1;j++){if(map[i][j]!='0'&&flag[i][j]==0){flag2 = 0;islian = 0;recursion(i,j,map[i][j]);if(islian==0){ans = Math.max(ans,flag2);}}}            }return ans;}public void recursion(int x,int y,char u){flag2++;flag[x][y] = 1;if(x==0||x==n-1||y==0||y==m-1)islian = 1;if(x+1<n){if(map[x+1][y]==u&&flag[x+1][y]==0){recursion(x+1,y,u);}if(map[x+1][y]=='0')islian=1;}if(x-1>=0){if(map[x-1][y]==u&&flag[x-1][y]==0){recursion(x-1,y,u);}if(map[x-1][y]=='0')islian = 1;}if(y+1<m){if(map[x][y+1]==u&&flag[x][y+1]==0){recursion(x,y+1,u);}if(map[x][y+1]=='0')islian = 1;}if(y-1>=0){if(map[x][y-1]==u&&flag[x][y-1]==0){recursion(x,y-1,u);}if(map[x][y-1]=='0')islian = 1;}}
}

后言

上面是力扣图论专题,下一篇是其他的习题,希望有所帮助,一同进步,共勉!

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

相关文章:

  • 【设计模式】如何用C++实现观察者模式【发布订阅机制】
  • 【LC】2717. 半有序排列
  • AI智算-k8s部署大语言模型管理工具Ollama
  • CloudberryDB(二) 演化路线图
  • 《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(二)
  • 实现canal监控binlog日志再通过消息队列异步处理
  • Linux DNS 协议概述
  • linux打包qt程序
  • 软考中级-软件设计师通过心路经验分享
  • safe area helper插件
  • 李宏毅机器学习-批次 (batch)和动量(momentum)
  • C# 网络编程--关于UDP 通信(二)
  • 【k8s集群应用】Kubernetes部署安装-二进制部署实例
  • js常见代码输出问题之promise,await,变量提升以及闭包(包括例子以及详细解析)
  • 遗传算法与深度学习实战(27)——进化卷积神经网络
  • 【Vue3】前端使用 FFmpeg.wasm 完成用户视频录制,并对视频进行压缩处理
  • 基础算法——前缀和
  • spring实例化对象的几种方式(使用XML配置文件)
  • 【二叉树】力扣 129.求根节点到叶子节点数字之和
  • 深度学习物体检测之YOLOV5源码解读
  • 音频数据采样入门详解 - 给Python初学者的简单解释
  • Unity类银河战士恶魔城学习总结(P179 Enemy Archer 弓箭手)
  • SpringCloud集成sleuth和zipkin实现微服务链路追踪
  • Python随机抽取Excel数据并在处理后整合为一个文件
  • Linux+Docker onlyoffice 启用 HTTPS 端口支持
  • 在 Visual Studio Code 中编译、调试和执行 Makefile 工程 llama2.c
  • python中math模块常用函数
  • 优化 Vue 3 开发体验:配置 Vite 使用 WebStorm 作为 Vue DevTools 的默认编辑器
  • 【C语言练习(9)—有一个正整数,求是几位数然后逆序打印】
  • 热敏打印机的控制