1267. Count Servers that Communicate

題目傳送門

分析

沒啥分析的,就是第一次遍歷標記哪行有電腦,哪列有電腦。然後在標記完成之後,我們只需要對齊再進行判斷就行。
在第一次遍歷時我們可以記錄下每臺電腦的位置,這樣我們就不必再遍歷整個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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章