【LeetCode】每日一题 2024_5_13 腐烂的橘子(经典多源 BFS)

文章目录

  • LeetCode?启动!!!
  • 题目:找出不同元素数目差数组
    • 题目描述
    • 代码与解题思路
  • 每天进步一点点

LeetCode?启动!!!


好久没写每日一题题解了,今天重新起航

干一件事情,永远不会太迟,只要现在开始,做什么都不算晚

题目:找出不同元素数目差数组

题目链接:994. 腐烂的橘子

题目描述

代码与解题思路

思路如标题,这道题是一道经典的多源 BFS 题目

func orangesRotting(grid [][]int) int {var dx = []int{0, 1, -1, 0}var dy = []int{1, 0, 0, -1}n, m := len(grid), len(grid[0])q := [][]int{}// 把第一轮需要 bfs 的节点找出for i := range grid {for j, v := range grid[i] {if v == 2 {q = append(q, []int{i, j})}}}ans := 0for len(q) > 0 {// 进行一轮 bfsfor sz := len(q); sz > 0; sz-- {t := q[0]q = q[1:]for i := 0; i < 4; i++ {x, y := dx[i]+t[0], dy[i]+t[1]if x < 0 || x >= n || y < 0 || y >= m || grid[x][y] != 1 {continue}grid[x][y] = 2q = append(q, []int{x, y})}}if len(q) > 0 {ans++}}// 如果还有新鲜的橘子, 则返回 -1for i := range grid {for _, v := range grid[i] {if v == 1 {return -1}}}return ans
} 

这是经典的多源 bfs 解题模板,我的解法,不过,最后再遍历一次判断是否还有新鲜橘子的操作可能略有些丑陋

可以看看灵神的判断方式,通过 fresh 变量的计数判断:

type pair struct{ x, y int }
var directions = []pair{{-1, 0}, {1, 0}, {0, -1}, {0, 1}} // 四方向func orangesRotting(grid [][]int) int {m, n := len(grid), len(grid[0])fresh := 0q := []pair{}for i, row := range grid {for j, x := range row {if x == 1 {fresh++ // 统计新鲜橘子个数} else if x == 2 {q = append(q, pair{i, j}) // 一开始就腐烂的橘子}}}ans := -1for len(q) > 0 {ans++ // 经过一分钟tmp := qq = []pair{}for _, p := range tmp { // 已经腐烂的橘子for _, d := range directions { // 四方向i, j := p.x+d.x, p.y+d.yif 0 <= i && i < m && 0 <= j && j < n && grid[i][j] == 1 { // 新鲜橘子fresh--grid[i][j] = 2 // 变成腐烂橘子q = append(q, pair{i, j})}}}}if fresh > 0 {return -1}return max(ans, 0)
}

每天进步一点点

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。

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

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

相关文章

U盘打不开无法使用

我一个U盘通过window无法识别了&#xff0c;属性也打不开&#xff1b; 我这时候通过挂载U盘到我的centos虚拟机上&#xff0c;打开后&#xff0c;将其挂载 如有需要备份其中的文件 fdisk -L blkid mount /dev/sdc4 /UP cp -r /UP /opt/ umout /UP mkfs.xfs -f /dev/sdc4…

AI与边缘设备,光子芯片,AI规划能力,自然语言驱动的AI游戏

1 Archetype AI 发布了一个创新的人工智能平台 —— Newton 这是一个专门为理解物理世界设计的基础模型。 Newton 设计用于连接实时物理数据&#xff0c;其数据源是全球数十亿传感器的输入&#xff0c;实现了对物理现实的直接解读。 利用从各种传感器&#xff08;如加速度计…

thinkphp8 framework和 element plus admin前后端分离系统之PHP安装教程

DIYGW-UI-PHP是一款基于thinkphp8 framework和 element plus admin开发而成的前后端分离系统。目的是结合现有diygw-ui打造一个后台API开发。 实现PHP源码前请先下载小皮面板或者宝塔。 系统已经集成了部分功能 用户管理 后台用户管理部门管理 配置公司的部门结构&#xff0…

MFC:鼠标左键

方法 ON_WM_LBUTTONDOWN( ) afx_msg void OnLButtonDown( UINT, CPoint ) 说明 CWnd::OnLButtonDown afx_msg void OnLButtonDown( UINT nFlags, CPoint point ); 参数&#xff1a; nFlags 指定了不同的虚拟键是否被按下。这个参数可以是下列值之一&#xff1a; MK_CONTROL …

248 基于matlab的GA-RBF神经网络预测

基于matlab的GA-RBF神经网络预测&#xff0c;遗传算法优化来训练RBF网络权值&#xff0c;RBF优化后的结果用于预测。输出真实值、RBF预测结果、GA-RBF预测结果&#xff0c;并进行对比。程序已调通&#xff0c;可直接运行。 248 RBF神经网络 GA-RBF 时间序列预测 - 小红书 (xiao…

软件测试之如何管理团队

前言 在软件开发过程中&#xff0c;软件测试团队的管理至关重要。有效的团队管理可以提高测试质量、加快发布速度并确保产品的稳定性。本文将讨论如何管理软件测试团队&#xff0c;以便提供一些指导和最佳实践。 设定清晰的目标和期望 在管理软件测试团队时&#xff0c;首先…

每天一个数据分析题(三百二十三)

在Excel中想要画出水滴图&#xff0c;可以使用哪种图表&#xff1f; A. 饼图 B. 簇状柱形图 C. 折线图 D. 树状图 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案

银发经济背后百万亿市场,解析冷门暴利的中老年AI赚钱项目!

最近“银发经济”这个词频繁出现&#xff0c;如果你注意到了抖音被封号的“秀才”以及仍在活跃的“一笑倾城”这两个账号&#xff0c;你就会明白中老年赛道的前景是多么广阔。 《银发经济蓝皮书》数据显示&#xff0c;到目前为止&#xff0c;我国60岁及以上的老年人口已超过2.8…

uniapp引用第三方组件样式无法穿透

在通过uniapp编写小程序过程中发现&#xff0c;引用第三方组件库的样式无法穿透修改。微信小程序文档也给出对应的解决思路自定义组件样式穿透 组件样式隔离 默认情况下&#xff0c;自定义组件的样式只受到自定义组件 wxss 的影响。除非以下两种情况&#xff1a; 指定特殊的…

扭蛋机小程序开发,探索扭蛋机市场的盈利趋势

近几年随着互联网科技的不断创新&#xff0c;扭蛋机又再一次进入到了大众的目光中&#xff0c;各种全新的“互联网扭蛋机”模式为大众打造了一个全新的扭蛋体验&#xff0c;市场规模也在不断扩大&#xff0c;为扭蛋机商家和创业者提供了巨大的发展空间。本文将介绍“互联网扭蛋…

夜莺监控(Nightingale)上线内置指标功能

Prometheus 生态里如果要查询数据&#xff0c;需要编写 promql&#xff0c;对于普通用户来说&#xff0c;门槛有点高。通常有两种解法&#xff0c;一个是通过 AI 的手段做翻译&#xff0c;你用大白话跟 AI 提出你的诉求&#xff0c;让 AI 帮你写 promql&#xff0c;另一种是平台…

巩固学习6

正则表达式 又称规则表达式&#xff0c;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a到z之间的字母&#xff09;和特殊字符&#xff08;称为“元字符”&…

Uniapp 自定义弹窗

布局 <view><view v-if"show" class"popup"><view class"popup-box"><view>支付方式:{{way}}</view><view>停车费用:{{money}}</view><view class"btn-box"><view class"ca…

Spring高手之路18——从XML配置角度理解Spring AOP

文章目录 1. Spring AOP与动态代理1.1 Spring AOP和动态代理的关系1.2 AOP基本术语 2. 通过XML配置实现Spring AOP2.1 添加Spring依赖2.2 定义业务接口和实现类2.3 定义切面类2.4 配置XML 1. Spring AOP与动态代理 1.1 Spring AOP和动态代理的关系 Spring AOP使用动态代理作为…

Python从0到POC编写--基础

什么是EXP、POC、CVE&#xff1a; 在某个漏洞出现的时候&#xff0c;会经常看到 exp啊&#xff0c;poc啊什么鬼的&#xff0c; 那么这些究竟是什么东西&#xff1f;&#xff1f; 余弦大大说&#xff1a; POC 即 Proof Of Concept&#xff0c;观点验证程序。 运行这个程序就…

【Linux系统编程】第十七弹---进程理解

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、进程的基本概念 2、描述进程-PCB 2.1、什么是PCB 2.2、为什么要有PCB 3、task_ struct 3.1、启动进程 3.2、创建进程…

基于微信小程序的预约挂号系统(源码)

博主介绍&#xff1a;✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

在Android Native层实现Try/Catch异常处理机制

文章目录 一、技术原理二、代码实现2.1 定义结构体保存线程的异常处理信息2.2 实现try/catch语义2.3 检查当前线程的异常处理信息2.4 设置信号处理函数2.5 信号处理和非局部跳转2.5.1 信号处理函数实现2.5.2 跳转回用户空间 2.6 清理异常处理的资源 三、使用示例3.1 示例3.2 如…

页眉如何插入横线

双击激活页眉——菜单栏——格式——边框和底纹——边框——应用于&#xff1a;段落——线型&#xff1a;选双线——预览&#xff1a;”点“下边框——确定。

Ubuntu20.04右键打不开终端

今天用virtualbox安装了ubuntu20.04 问题&#xff1a;右键打开终端&#xff0c;怎么也打开不了&#xff01; 点了也没反应&#xff0c;或者鼠标转小圈圈&#xff0c;然后也没有反应… 解决方法&#xff1a; 1、Ctrl Alt F6 先切换到终端访问界面 mac电脑 Ctrl Alt F6 …