分析
沒啥分析的,就是第一次遍歷標記哪行有電腦,哪列有電腦。然後在標記完成之後,我們只需要對齊再進行判斷就行。
在第一次遍歷時我們可以記錄下每臺電腦的位置,這樣我們就不必再遍歷整個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;
}
};