代码随想录三刷day52

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、力扣417. 太平洋大西洋水流问题
  • 二、力扣827. 最大人工岛
  • 三、力扣127. 单词接龙
  • 四、力扣841. 钥匙和房间


前言


岛屿问题最容易让人想到BFS或者DFS,但是这道题还真的没有必要,别把简单问题搞复杂了

一、力扣417. 太平洋大西洋水流问题

class Solution {int[][] arr = new int[][]{{0,1},{0,-1},{-1,0},{1,0}};boolean[][][] flag;public List<List<Integer>> pacificAtlantic(int[][] heights) {int m = heights.length, n = heights[0].length;flag = new boolean[m][n][2];List<List<Integer>> res = new ArrayList<>();for(int i = 0; i < m; i ++){if(!flag[i][0][0]){dfs(heights,i,0,0);}if(!flag[i][n-1][1]){dfs(heights,i,n-1,1);}}for(int i = 0; i < n; i ++){if(!flag[0][i][0]){dfs(heights,0,i,0);}if(!flag[m-1][i][1]){dfs(heights,m-1,i,1);}}for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(flag[i][j][0] && flag[i][j][1]){res.add(new ArrayList<>(Arrays.asList(i,j)));}}}return res;}public void dfs(int[][] heights, int x, int y, int sign){flag[x][y][sign] = true;for(int i = 0; i < 4; i ++){int curX = x + arr[i][0];int curY = y + arr[i][1];if(curX < 0 || curX >= heights.length || curY <0 || curY >= heights[0].length){continue;}if(!flag[curX][curY][sign] && heights[curX][curY] >= heights[x][y]){dfs(heights,curX,curY,sign);}}}
}

二、力扣827. 最大人工岛

class Solution {int[][] arr = new int[][]{{1,0},{-1,0},{0,1},{0,-1}};int count;public int largestIsland(int[][] grid) {Map<Integer,Integer> map = new HashMap<>();int flag = 2;int res = Integer.MIN_VALUE;int m = grid.length, n = grid[0].length;for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(grid[i][j] == 1){count = 1;grid[i][j] = flag;dfs(grid,i,j,flag);map.put(flag,count);flag ++;}}}for(int i = 0; i < m; i ++){for(int j = 0; j < n; j ++){if(grid[i][j] == 0){Set<Integer> set = new HashSet<>();int sum = 0;for(int k = 0; k < 4; k ++){int curX = i + arr[k][0];int curY = j + arr[k][1];if(curX < 0 || curX >= m || curY < 0 || curY >= n){continue;}if(set.contains(grid[curX][curY]) || !map.containsKey(grid[curX][curY])){continue;}sum += map.get(grid[curX][curY]);set.add(grid[curX][curY]);}res = Math.max(res,sum);}}}return res == Integer.MIN_VALUE ? m * n : res+1;}public void dfs(int[][] grid, int x, int y,int flag){for(int i = 0; i < 4; i++){int curX = x + arr[i][0];int curY = y + arr[i][1];if(curX < 0 || curX >= grid.length || curY < 0 || curY >= grid[0].length){continue;}if(grid[curX][curY] == 1){count ++;grid[curX][curY] = flag;dfs(grid,curX,curY,flag);}}}
}

三、力扣127. 单词接龙

class Solution {public int ladderLength(String beginWord, String endWord, List<String> wordList) {Deque<String> deq = new LinkedList<>();int res = 1;Map<String,Boolean> map = new HashMap<>();for(String s : wordList){map.put(s,false);}if(wordList.size() == 0 || !map.containsKey(endWord)){return 0;}deq.offerLast(beginWord);while(!deq.isEmpty()){int size = deq.size();for(int j = 0; j < size; j ++){String cur = deq.pollFirst();for(int i = 0; i < wordList.size(); i ++){String next = wordList.get(i);if(!map.get(next) && fun(cur,next)){if(next.equals(endWord)){return res+1;}map.put(next,true);deq.offerLast(next);}}}res ++;}return 0;}public boolean fun(String cur, String next){int dif = 0;for(int i = 0; i < cur.length(); i ++){if(cur.charAt(i) != next.charAt(i)){dif ++;}if(dif >= 2){return false;}}if(dif == 0){return false;}return true;}
}

四、力扣841. 钥匙和房间

class Solution {public boolean canVisitAllRooms(List<List<Integer>> rooms) {Map<Integer,Boolean> map = new HashMap<>();for(int i = 0; i < rooms.size(); i ++){map.put(i,false);}map.put(0,true);Deque<Integer> deq = new LinkedList<>();deq.offerLast(0);while(!deq.isEmpty()){int size = deq.size();for(int i = 0; i < size; i++){int cur = deq.pollFirst();for(int j = 0; j < rooms.get(cur).size(); j ++){if(!map.get(rooms.get(cur).get(j))){deq.offerLast(rooms.get(cur).get(j));map.put(rooms.get(cur).get(j),true);}}}}for(Map.Entry<Integer,Boolean> entrys: map.entrySet()){if(!entrys.getValue()){return false;}}return true;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依开发-数据库修改密码

若依忘记密码 在SecurityUtils类添加 public static void main(String[] args) {System.out.println(SecurityUtils.encryptPassword("admin123"));}即可打印出加密后密码

向数据库插入一条数据同时获取主键id

首先创建一个对象 将这个对象使用mybatis插入数据库 Student stu new Student(null, "stu", 18, null); mapper.insertEntity(stu); System.out.println(stu); 在mapper.xml文件中开启配置之后输出传入的stu对象就会有主键id回传 <!-- 插入语句示例 int ins…

探索安全之道 | 企业漏洞管理:从理念到行动

如今&#xff0c;网络安全已经成为了企业管理中不可或缺的一部分&#xff0c;而漏洞管理则是网络安全的重中之重。那么企业应该如何做好漏洞管理呢&#xff1f;不妨从业界标准到企业实践来一探究竟&#xff01;通过对业界标准的深入了解&#xff0c;企业可以建立起完善的漏洞管…

谷歌发布文生视频模型——Veo,可生成超过一分钟高质量1080p视频

前期我们介绍过OpenAI的文生视频大模型-Sora 模型&#xff0c;其模型一经发布&#xff0c;便得到了大家疯狂的追捧。而Google最近也发布了自己的文生视频大模型Veo&#xff0c;势必要与OpenAI进行一个正面交锋。 Veo 是Google迄今为止最强大的视频生成模型。它可以生成超过一分…

计算机网络 3.7广域网

第七节 广域网 一、认识广域网 1.定义&#xff1a;一个范围广的计算机网络&#xff0c;在地理上可以跨越很大的距离&#xff0c;实现局域网资源共享与广域网共享的结合。 2.组成&#xff1a;通信子网、资源子网。 3.主要设备&#xff1a;路由器、调制解调器&#xff0c;通信…

JVM虚拟机性能监控工具

命令行工具 jps 虚拟机进程状况查询工具 jps(JVM Process Status Tool)&#xff0c;可以列出正在运行的虚拟机进程&#xff0c;并显示虚拟机执行主类名称或者jar文件名&#xff0c;还有这些进程的本地虚拟机唯一ID(LVMID&#xff0c;Local Virtual Machine Identifier)。 # …

openGuass(postgres)导出及导入数据一日游

目的&#xff1a; 实现每周备份一次数据库 新建一个sh文件 #!/bin/bash # 定义参数 DB_USER"wangzhezhizuo" DB_PASSWORD"wangzhezhizuo123" DB_NAME"mydb" DB_SCHEME"public" DB_PORT"5432" REMOTE_IP"192.168.0.1…

网页安全登陆的设计思路

对于Web网站来讲,不管是企业内容信息化系统,还是公共站点(博客、音视频站等),都有需要用户注册和登录的功能。用以识别用户、信息交互、信息隔离以及商业行为等场景。用户数据已成为网站的重要资产。保护用户信息(数据)是网站安全运行的关键任务。本文以用户安全登录的场…

dubbo复习:(15)泛化调用

客户端在没有拿到服务器端接口定义的情况下通过反射获取服务 1.服务器端定义接口 package cn.edu.tju.service;public interface DevelopService {String invoke(String param); }2.服务器端实现接口 package cn.edu.tju.service;import org.apache.dubbo.config.annotation.…

521源码-网站源码-Thinkphp聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能/全开源运营版本

全开源运营版本聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能 都是去年买的&#xff0c;很多买的源码基本都下架了&#xff0c;详情还是套已经老站的&#xff0c;可能网上已经流传了点&#xff0c;不过还是不影响这个源码的牛逼所在 运营版本的聊天室&…

Bev算法在J5平台的部署

文章目录 1. 介绍1. 1 Bev的优势1. 2 视角转换13 Bev 感知总体框架2 IPM 方案2.1 性能指标2.2 Backbone2.3 视角转换2.3 坐标系转换2.4 grid sample采样原理2.5 IPM空间融合2.6 IPM-Neck2.7 多任务头2.7.1 分割头2.7.2 检测头

JVM之【运行时数据区2——堆】

三、堆&#xff08;Heap&#xff09; 1、什么是堆 在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;堆&#xff08;Heap&#xff09;是用于动态分配内存的区域。在Java程序运行时&#xff0c;所有对象和数组都是在堆中分配内存的。堆是Java内存模型的重要组成部分&…

21.Redis之分布式锁

1.什么是分布式锁 在⼀个分布式的系统中, 也会涉及到多个节点访问同⼀个公共资源的情况. 此时就需要通过 锁 来做互斥控制, 避免出现类似于 "线程安全" 的问题. ⽽ java 的 synchronized 或者 C 的 std::mutex, 这样的锁都是只能在当前进程中⽣效, 在分布式的这种多…

LabVIEW调用第三方硬件DLL常见问题及开发流程

在LabVIEW中调用第三方硬件DLL时&#xff0c;除了技术问题&#xff0c;还涉及开发流程、资料获取及与厂家的沟通协调。常见问题包括函数接口不兼容、数据类型转换错误、内存管理问题、线程安全性等。解决这些问题需确保函数声明准确、数据类型匹配、正确的内存管理及线程保护。…

堆算法详解

目录 堆 二叉堆的实现 二叉堆的插入 二叉堆取出堆顶 &#xff08;extract/delete max&#xff09; 优先对列 (priority queue) 堆的实现 语言中堆的实现 leadcode 题目堆应用 堆 堆是一种高效维护集合中最大或最小元素的数据结构。 大根堆&#xff1a;根节点最大的堆…

C/C++开发,2024.x CLion安装,亲测有效

CLion 是一款专为 C 和 C 开发者设计的跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了智能代码补全、代码分析、调试和 Git 集成等功能&#xff0c;以提高开发效率和代码质量。 1.下载安装c/c开发工具 CLion 先去官网下载&#xff0c;我这里下载的是最新版…

装修全流程

Summary 从2023年底到现在&#xff08;2024年6月2日&#xff09;&#xff0c;装修可以定的东西基本过半了&#xff0c;我按照时间顺序把每个环节的内容和想法都记录一下 环节 选装修公司、找设计师设计环节预算计算角色介绍建材选型敲墙和开工水电放样泥工木工放样To be cont…

Re73 读论文:ULMFiT Universal Language Model Fine-tuning for Text Classification

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;Universal Language Model Fine-tuning for Text Classification 模型简称&#xff1a;ULMFiT 模型全名&#xff1a;Universal Language Model Fine-tuning ArXiv网址&#xff1a;https…

20240529每日前端--------vue数组对象包含数组,判断子数组是否有重复对象

数组格式如下&#xff1a; "industrySceneList": [{"mainIndustry": 1,"mainIndustryName": "林草","sceneList": [{"subIndustry": 1,"subIndustryName": "森林防火"}]},{"mainIndust…

【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版6(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言方法一、使用excel配置表excel转txt文本读取txt数据按配置信息生成僵尸 方法二、使用ScriptableObject 配置关卡信息源码结束语 前言 本节主要是推荐两种实现配置关卡信息&#xff0c;并按表生成僵尸和关卡波次 方法一、使用…