分析
没啥分析的,就是第一次遍历标记哪行有电脑,哪列有电脑。然后在标记完成之后,我们只需要对齐再进行判断就行。
在第一次遍历时我们可以记录下每台电脑的位置,这样我们就不必再遍历整个grid
。这个记录操作过程我们可以优化,当我们已经明确知道其可以通信时,我们只需要count++
,而不必保存其位置。
代码
class Solution {
public:
int countServers(vector<vector<int>>& grid) {
vector<int> row(grid.size(), 0), column(grid[0].size(), 0);
vector<pair<int, int>> trace;
int count = 0;
for(int i = 0; i < grid.size(); i++){
for(int j = 0; j < grid[i].size(); j++){
if(grid[i][j] == 1){
row[i]++;
column[j]++;
if(row[i] > 1 || column[j] > 1){
count++;
}else{
trace.push_back({i, j});
}
}
}
}
for(auto k : trace){
if(row[k.first] > 1 || column[k.second] > 1){
count++;
}
}
return count;
}
};