就是找联通块
dfs就行
class Solution { public: bool vis[1010][1010]; void dfs(vector<vector<int>>& land, int x, int y, int& cnt) { cnt++; int len1 = land.size(); int len2 = land[0].size(); for(int i = -1; i <= 1; i++) for(int j = -1; j <= 1; j++) { int nx = x + i; int ny = y + j; if(nx < 0 || ny < 0 || nx >= len1 || ny >= len2 || vis[nx][ny] == 1 || land[nx][ny] != 0) continue; vis[nx][ny] = 1; dfs(land, nx, ny, cnt); } } vector<int> pondSizes(vector<vector<int>>& land) { vector<int> ret; memset(vis, 0, sizeof(vis)); int len1 = land.size(); int len2 = land[0].size(); for(int i = 0; i < len1; i++) for(int j = 0; j < len2; j++) if(land[i][j] == 0 && vis[i][j] == 0) { int cnt = 0; vis[i][j] = 1; dfs(land, i, j, cnt); ret.push_back(cnt); } sort(ret.begin(), ret.end()); return ret; } };