隣接するペアから配列を復元する(C ++は隣接する要素のペアから配列を復元します)

問題解決のアイデア:

(1)dfs

class Solution {
public:
    vector<int> restoreArray(vector<vector<int>>& adjacentPairs) {
        unordered_map<int,int> mp;
        unordered_map<int,vector<int>>mt;
        for(int i=0;i<adjacentPairs.size();i++) {
            mp[adjacentPairs[i][0]]++;
            mp[adjacentPairs[i][1]]++;
            mt[adjacentPairs[i][0]].push_back(adjacentPairs[i][1]);
            mt[adjacentPairs[i][1]].push_back(adjacentPairs[i][0]);
        }
        
        int start=0;
        for(auto it=mp.begin();it!=mp.end();it++) {
            if(it->second==1) start=it->first;
            it->second=0;
        }
        
        vector<int> v(1,start);
        mp[start]=1;
        
        while((mt[start].size()==1 && mp[mt[start][0]]==0) || (mp[mt[start][0]]==0 || mp[mt[start][0]]==1)) {
            if(mp[mt[start][0]]==0) {
                v.push_back(mt[start][0]);
                mp[mt[start][0]]=1;
                start=mt[start][0];
            } else if(mt[start].size()==1) return v;
            else {
                v.push_back(mt[start][1]);
                mp[mt[start][1]]=1;
                start=mt[start][1];
            }
        }
        return v;
    }
};

 

おすすめ

転載: blog.csdn.net/coolsunxu/article/details/114695900