hot100-腐烂的橘子
思路
每个腐烂橘子向四周感染一次,直到没有新鲜橘子所需的最少时间。其中一定设计图的遍历,那么是DFS还是BFS?因为要求一层层感染完的最少时间,所以用BFS。即把腐烂橘子放入队列,每次感染一波出队,再把新感染的入队,直到所有腐烂橘子都向四周感染过一次。
为了判断是否有橘子永远不会被感染,还要记录一开始的新鲜橘子数。
代码
- 遍历所有橘子,腐烂入队,新鲜的让新鲜橘子数+1
- BFS框架
class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
int fresh=0;// 有多少个新鲜橘子——最后判断是否有橘子永远不会腐烂
int times=0;
queue<pair<int,int>> q;
int m=grid.size();
int n=grid[0].size();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(grid[i][j]==2){
q.push({i,j});
}else if(grid[i][j]==1){
fresh++;
}
}
}
vector<vector<int>> dirs = {{-1,0},{1,0},{0,-1},{0,1}};
while(!q.empty()){
int num = q.size();
bool rotten=false;//这一层有橘子被腐烂了才能让时间++
for(int i=0;i<num;i++){
auto x = q.front();
q.pop();
for(auto dir : dirs){
int i=x.first + dir[0];
int j=x.second + dir[1];
if(i>=0&&i<m&&j>=0&&j<n&&grid[i][j]==1){
fresh--;
rotten = true;
grid[i][j]=2;
q.push({i,j});
}
}
}
if(rotten==true)times++;
}
return fresh==0 ? times : -1;
}
};
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架