1743. 从相邻元素对还原数组

题目出处:https://leetcode-cn.com/problems/restore-the-array-from-adjacent-pairs/

思路:根据本题的特点,如果是首尾两个元素,则只有一个邻居。如果是中间的元素,则有两个邻居。构造哈希表<节点,节点的邻居集合>,遍历该集合便可解决问题。

class Solution {
private:
    vector<int> ans;    
public:
    // void dfs(int v, unordered_map<int, vector<int>> & mp, unordered_map<int, bool>& vis){

    //     for(int neibor : mp[v]){
    //         if(!vis[neibor]){
    //            vis[neibor] = true;
    //            ans.push_back(neibor);
    //            dfs(neibor, mp, vis);
    //         }
    //     }
    // }
    vector<int> restoreArray(vector<vector<int>>& adjacentPairs) {
        unordered_map<int, vector<int>> mp;
        for(vector<int> & adjacentPair : adjacentPairs){
            mp[adjacentPair[0]].push_back(adjacentPair[1]);
            mp[adjacentPair[1]].push_back(adjacentPair[0]);
        }

        int n = mp.size();
        
        ans.resize(n);  //用dfs的话去掉这句话
        unordered_map<int, bool> vis;
        for(auto & v : mp){
            if(v.second.size() == 1){
               //ans.push_back(v.first);
               ans[0] = v.first;
               vis[v.first] = true;   
               break;
            } 
        }
        
        //dfs(ans[0], mp, vis);
        ans[1] = mp[ans[0]][0];
        for(int i = 2; i < n; ++i){
           vector<int> neibor = mp[ans[i-1]];
           ans[i] = neibor[0] == ans[i-2] ? neibor[1] : neibor[0];
        }

        return ans;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值