LeetCode:52.腐烂的橘子
目录
1.腐烂的橘子
1.腐烂的橘子
用一个队列来保存腐烂的橘子的坐标,可以先遍历整个数组,如果没有新鲜的橘子直接返回0,否则的话保存好腐烂的橘子坐标,通过两个数组来模拟腐烂的过程,当一轮腐烂结束时,如果队列中还有腐烂的橘子,说明这一轮有新的橘子被腐烂,时间++,否则的话说明没有新的橘子被腐烂,最后,如果新鲜橘子数量为0,返回时间,否则返回-1
class Solution {
public:int orangesRotting(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size();int fresh = 0, time = 0;queue<pair<int, int>> q;for(int i = 0; i < m; i++)for(int j = 0; j < n; j++){if(grid[i][j] == 1) fresh++;else if(grid[i][j] == 2) q.push({i, j});}if(fresh == 0) return 0;int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};while(!q.empty() && fresh > 0){int currLevelSize = q.size();for(int i = 0; i < currLevelSize; i++){pair<int, int> p = q.front(); q.pop();for(int k = 0; k < 4; k++){int x = p.first + dx[k], y = p.second + dy[k];if(x >= 0 && x < m && y >= 0 && y < n && grid[x][y] == 1){grid[x][y] = 2;fresh--;q.push({x, y});}}}if(!q.empty()) time++;}return fresh == 0 ? time : -1;}
};