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

腐烂的橘子 -- DFS、BFS

994. 腐烂的橘子


class OrangesRotting:"""994. 腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/"""def solution(self, grid: List[List[int]]) -> int:"""BFS时间复杂度 O(M*N)空间复杂度 O(M*N):param grid::return:"""row, col, time = len(grid), len(grid[0]), 0directions = [(1, 0), (-1, 0), (0, 1), (0, -1)]queue = []# add the rotten orange to the queuefor i in range(row):for j in range(col):if grid[i][j] == 2:queue.append((i, j, time))# bfswhile queue:i, j, time = queue.pop(0)for di, dj in directions:if 0 <= i + di < row and 0 <= j + dj < col and grid[i + di][j + dj] == 1:grid[i + di][j + dj] = 2queue.append((i+di, j+dj, time+1))# if there are still fresh oranges, return -1for row in grid:if 1 in row:return -1return timedef solution1(self, grid: List[List[int]]) -> int:"""DFS时间复杂度 O((M*N)^2)空间复杂度 O(M*N):param grid::return:"""rows, cols = len(grid), len(grid[0])fresh = set()rotten = set()# Find positions of fresh and rotten orangesfor r in range(rows):for c in range(cols):if grid[r][c] == 1:fresh.add((r, c))elif grid[r][c] == 2:rotten.add((r, c))def dfs(r, c, minutes):# Check if position is valid and orange is freshif r < 0 or r >= rows or c < 0 or c >= cols or grid[r][c] != 1:return# If the current rotting time is less than the stored value# update it and continue DFS to adjacent orangesif (r, c) in fresh and minutes < self.time_to_rot.get((r, c), float('inf')):self.time_to_rot[(r, c)] = minutesdfs(r + 1, c, minutes + 1)dfs(r - 1, c, minutes + 1)dfs(r, c + 1, minutes + 1)dfs(r, c - 1, minutes + 1)# Dictionary to store the time taken to rot each fresh orangeself.time_to_rot = {}# Start DFS from each rotten orangefor r, c in rotten:dfs(r + 1, c, 1)dfs(r - 1, c, 1)dfs(r, c + 1, 1)dfs(r, c - 1, 1)# If there are fresh oranges that never rot, return -1if len(fresh) != len(self.time_to_rot):return -1# Return the maximum time taken to rot any fresh orangereturn max(self.time_to_rot.values(), default=0)

相关文章:

腐烂的橘子 -- DFS、BFS

994. 腐烂的橘子 class OrangesRotting:"""994. 腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/"""def solution(self, grid: List[List[int]]) -> int:"""BFS时间复杂度 O(M*N)空间复杂度 O(M*N):par…...

java swing UI第三方设计器JFormDesiner和FlatLaf UI

安装JFormDesiner 官网&#xff1a;https://www.formdev.com/ 先去IDEA的插件市场安装吧 JFormDesiner是非开源&#xff0c;且付费的插件&#xff0c;可以自己去找找不付费的使用方法。在swing可视化设计UI非常高效快捷&#xff0c;初学者可能需要一定时间探索&#xff0c;熟…...

前端JS实现全屏和退出全屏的效果

全屏效果想必我们都很清楚把&#xff0c;平时追剧看电视剧什么都会使用全屏方便我们看&#xff0c;我们键盘的第一个键esc可以退出全屏&#xff0c;那么我们如何用js实现全屏的办法呢&#xff1f; 设置全屏 Document.requestFullscreen()&#xff0c;该方法用于异步请求使元素…...

蓝桥杯C组-填充-贪心

点击此处查看原题​​​​​​​ *思路&#xff1a;首先要求 00 11 尽可能的多&#xff0c;所以尽可能多的多配对&#xff0c;配对只在i , i 1之间发生&#xff0c;所以只需要关注str[i] 和 str[i 1]即可&#xff0c;如果str[i] str[i 1] &#xff0c;那么一定配对&#x…...

mysql查询当天、近一周、近一个月及近一年的数据以及各种报表查询sql

以下是一些常见的MySQL查询语句&#xff0c;用于查询当天、近一周、近一个月和近一年的数据&#xff0c;以及一些常见的报表查询。 查询当天的数据&#xff1a; SELECT * FROM table_name WHERE DATE(date_column) CURDATE();查询近一周的数据&#xff1a; SELECT * FROM t…...

C# 使用Fleck创建WebSocket服务器

目录 写在前面 代码实现 服务端代码 客户端代码 调用示例 写在前面 Fleck 是 C# 实现的 WebSocket 服务器&#xff0c;通过 WebSocket API&#xff0c;浏览器和服务器只需要做一个握手的动作&#xff0c;然后浏览器和服务器之间就形成了一条快速通道&#xff1b;两者之间…...

Android中的SPI实现

Android中的SPI实现 SPI是JVM世界中的标准API&#xff0c;但在Android应用程序中并不常用。然而&#xff0c;它可以非常有用地实现插件架构。让我们探讨一下如何在Android中利用SPI。 问题 在Android中&#xff0c;不同的提供者为推送功能提供服务&#xff0c;而在大型项目中…...

什么是设计模式(第7章笔记)

目录 一、什么是设计模式 二、设计模式概要 1、名称 2、问题 3、解决方案 4、效果 三、《设计模式》的结构 四、小结 一、什么是设计模式 设计模式&#xff1a;是对已经分析过的问题&#xff0c;以及相关问题解决方案的优秀实践&#xff1b; 1、同样的问题总是重复出现&…...

【python入门】day27: 模拟高铁售票系统

界面 代码 #-*- coding:utf-8 -*- import prettytable as pt#---------导入漂亮表格 import os.path filename ticket.txt#更新座位状态 def update(row_num):#------更新购票状态with open(filename,w,encodingutf-8) as wfile:for i in range(row_num):lst1 [f{i1},有票,有…...

智能助手的巅峰对决:ChatGPT对阵文心一言

在人工智能的世界里&#xff0c;ChatGPT与文心一言都是备受瞩目的明星产品。它们凭借先进的技术和强大的性能&#xff0c;吸引了大量用户的关注。但究竟哪一个在智能回复、语言准确性、知识库丰富度等方面更胜一筹呢&#xff1f;下面就让我们一探究竟。 首先来谈谈智能回复能力…...

Android系统开发之浅谈广播接收器回调

广播接器BroadcastReceiver 广播Intent和广播接收器BroadcastReceiver&#xff0c;是大家android开发用的特别多的二个控件。 那如何从系统角度看待广播和广播接收器呢&#xff1f; 对于静态注册BroadcastReceiver和动态注册的BroadcastReceiver是如何回调其onReceive方法呢…...

PiflowX如何快速开发flink程序

PiflowX如何快速开发flink程序 参考资料 Flink最锋利的武器&#xff1a;Flink SQL入门和实战 | 附完整实现代码-腾讯云开发者社区-腾讯云 (tencent.com) Flink SQL 背景 Flink SQL 是 Flink 实时计算为简化计算模型&#xff0c;降低用户使用实时计算门槛而设计的一套符合标…...

Mysql运算符

文章目录 比较运算符< > !IS NULL \ IS NOT NULL \ ISNULLLEAST() \ GREATEST() 查询数据大小&#xff08;字典序&#xff09;BETWEEN...AND...IN (SET) \ NOT IN (SET)LIKE 模糊查询REGEXP \ RLIKE 逻辑运算符逻辑运算符&#xff1a; OR &#xff08;||&#xff09;、A…...

软件架构之事件驱动架构

一、定义 事件驱动的架构是围绕事件的发布、捕获、处理和存储&#xff08;或持久化&#xff09;而构建的集成模型。 某个应用或服务执行一项操作或经历另一个应用或服务可能想知道的更改时&#xff0c;就会发布一个事件&#xff08;也就是对该操作或更改的记录&#xff09;&am…...

C++ 后端面试 - 题目汇总

文章目录 &#x1f37a; 非技术问题&#x1f37b; 基本问题&#x1f942; 请自我介绍&#xff1f;&#x1f942; 你有什么问题需要问我的&#xff1f; &#x1f37b; 加班薪资&#x1f942; 你对加班有什么看法&#xff1f;&#x1f942; 你的薪资期望是多少&#xff1f;【待回…...

zds1104示波器使用指南

1、设置语言 2、功能检测验证示波器是否正常工作 3、示波器面板按钮详解 3.1、软键 3.2、运行控制与操作区 3.3、水平控制区 3.4、垂直控制区 3.5、多功能控制区 3.6、断电启动恢复&#xff0c;auto setup&#xff0c;default setup&#xff0c;恢复出厂设置详细解释 3.7、触…...

uni-app修改头像和个人信息

效果图 代码&#xff08;总&#xff09; <script setup lang"ts"> import { reqMember, reqMemberProfile } from /services/member/member import type { MemberResult, Gender } from /services/member/type import { onLoad } from dcloudio/uni-app impor…...

IDEA 中搭建 Spring Boot Maven 多模块项目 (父SpringBoot+子Maven)

第1步&#xff1a;新建一个SpringBoot 项目 作为 父工程 [Ref] 新建一个SpringBoot项目 删除无用的 .mvn 目录、 src 目录、 mvnw 及 mvnw.cmd 文件&#xff0c;最终只留 .gitignore 和 pom.xml 第2步&#xff1a;创建 子maven模块 第3步&#xff1a;整理 父 pom 文件 ① …...

竞赛保研 基于计算机视觉的身份证识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的身份证识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-sen…...

在visual studio中调试时无法查看std::wstring

1.问题 在调试的时候发现std::wstring类型的变量查看不了&#xff0c;会显示(error)|0&#xff0c;百思不得其解。 2.解决方法 参考的&#xff1a;vs2015调试时无法显示QString变量的值&#xff0c;只显示地址_vs调试qstring的时候如何查看字符串-CSDN博客 在工具/选项/调试…...

从电路振荡到种群竞争:常系数线性微分方程组在建模中的实战指南

从电路振荡到种群竞争&#xff1a;常系数线性微分方程组在建模中的实战指南微分方程是描述动态系统的数学语言&#xff0c;而常系数线性微分方程组则是其中最具工程实用价值的一类。不同于纯数学视角下的求解技巧&#xff0c;本文将带你穿越两个经典场景——电子工程中的RLC振荡…...

当 SonarQube 遇见 Go:从零搭建自动化代码质量检测体系

继 gofmt、golangci-lint、go test -race 之后,SonarQube 成为 Go 工程化质量保障体系的第四块拼图 在上一篇文章中,我们详细梳理了 gofmt + golangci-lint + go test -race 这套原生工具链的审查体系。这套组合拳在代码风格统一、静态分析和数据竞争检测方面表现出色,但细心…...

Lindy企业流程自动化实施全周期拆解:从0到1上线仅需14天的关键5步法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Lindy企业流程自动化实施全周期拆解&#xff1a;从0到1上线仅需14天的关键5步法 Lindy 作为轻量级、高可扩展的流程自动化平台&#xff0c;其核心优势在于将复杂的企业级RPA与低代码逻辑深度融合&#…...

项目介绍 基于java+vue的跨境电商销售预测与可视化平台设计与实现(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢

基于javavue的跨境电商销售预测与可视化平台设计与实现的详细项目实例 请注意此篇内容只是一个项目介绍 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面&#xff08;含完整的程序&#xff0c;GUI设计和代码详解&#xff09; 跨境电商销售预测…...

从收音机到手机充电器:聊聊二极管等效电路在经典电路里的那些‘隐身’角色

从矿石收音机到快充芯片&#xff1a;二极管的七十二变与现代电子革命 清晨的阳光透过老式木窗洒在桌面上&#xff0c;一位无线电爱好者正小心翼翼地调整着矿石收音机的触须。这个看似简单的装置&#xff0c;却藏着电子世界最精妙的秘密——检波二极管。而在城市的另一端&#x…...

餐饮门店AI Agent上线倒计时:错过Q3政策补贴窗口期,将多付47%算力成本(附工信部认证服务商名录)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;餐饮门店AI Agent的核心价值与政策窗口期紧迫性 在人力成本持续攀升、消费者预期快速迭代的双重压力下&#xff0c;餐饮门店正面临从“经验驱动”向“智能协同”跃迁的关键拐点。AI Agent 不再是实验室概念&am…...

Beyond Compare 5密钥生成器:从评估到期到永久授权的完整解决方案

Beyond Compare 5密钥生成器&#xff1a;从评估到期到永久授权的完整解决方案 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 你是否在使用Beyond Compare 5进行文件对比时&#xff0c;遇到了30…...

为小型创业团队搭建经济可控的大模型应用开发平台

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为小型创业团队搭建经济可控的大模型应用开发平台 对于资源有限的创业团队而言&#xff0c;在拥抱大模型技术的同时&#xff0c;必…...

独立开发者如何借助Taotoken低成本试验多种大模型效果

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken低成本试验多种大模型效果 对于独立开发者或小微团队而言&#xff0c;在创意验证或产品原型阶段&#…...

农业Agent不是“加个模型”,而是重写作业流程:3张架构图讲透农机调度、病虫害预警、供应链匹配的Agent协同范式

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;农业Agent不是“加个模型”&#xff0c;而是重写作业流程&#xff1a;3张架构图讲透农机调度、病虫害预警、供应链匹配的Agent协同范式 农业智能化的真正瓶颈&#xff0c;从来不在单点AI能力的强弱&…...