zoukankan      html  css  js  c++  java
  • 5665. 从相邻元素对还原数组(Leetcode周赛1-31)

    https://leetcode-cn.com/problems/restore-the-array-from-adjacent-pairs

    存在一个由 n 个不同元素组成的整数数组 nums ,但你已经记不清具体内容。好在你还记得 nums 中的每一对相邻元素。

    给你一个二维整数数组 adjacentPairs ,大小为 n - 1 ,其中每个 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相邻。

    题目数据保证所有由元素 nums[i] 和 nums[i+1] 组成的相邻元素对都存在于 adjacentPairs 中,存在形式可能是 [nums[i], nums[i+1]] ,也可能是 [nums[i+1], nums[i]] 。这些相邻元素对可以 按任意顺序 出现。

    返回 原始数组 nums 。如果存在多种解答,返回 其中任意一个 即可。

    示例 1:

    输入:adjacentPairs = [[2,1],[3,4],[3,2]]
    输出:[1,2,3,4]
    解释:数组的所有相邻元素对都在 adjacentPairs 中。
    特别要注意的是,adjacentPairs[i] 只表示两个元素相邻,并不保证其 左-右 顺序。
    示例 2:

    输入:adjacentPairs = [[4,-2],[1,4],[-3,1]]
    输出:[-2,4,1,-3]
    解释:数组中可能存在负数。
    另一种解答是 [-3,1,4,-2] ,也会被视作正确答案。
    示例 3:

    输入:adjacentPairs = [[100000,-100000]]
    输出:[100000,-100000]
     

    提示:

    nums.length == n
    adjacentPairs.length == n - 1
    adjacentPairs[i].length == 2
    2 <= n <= 105
    -105 <= nums[i], ui, vi <= 105
    题目数据保证存在一些以 adjacentPairs 作为元素对的数组 nums

    思路:

    1.根据pairs建立无向图邻接表。

    2.找到其中任一端点。

    3.从端点开始,逐个连接后续元素(连接后的元素放入set,防止再用一次造成死循环)

    class Solution {
    public:
        vector<int> restoreArray(vector<vector<int>>& adjacentPairs) {
            vector<int> v; 
            set<int> s;
            unordered_map<int, vector<int>> m;
            int start;
            int n = adjacentPairs.size();
            for (int i = 0; i<n; i++){//建立无向图邻接表
                m[adjacentPairs[i][1]].push_back(adjacentPairs[i][0]);
                m[adjacentPairs[i][0]].push_back(adjacentPairs[i][1]);
            }
            for (auto c : m){//找到端点
                if (c.second.size() == 1){
                    start = c.first;
                    v.push_back(c.first);
                    s.insert(c.first);
                    break;
                }
            }
            while (s.size() <= n) {
                for (int i = 0; i < m[start].size(); i++) {
                    int target = mp[start][i];
                    if (s.count(target)==0) {//该元素未被提取过
                        v.push_back(target);
                        s.insert(target);
                        start = target;
                    }
                }
            }
            return v;
        }
    };
  • 相关阅读:
    JavaEE——SpringMVC(11)--拦截器
    JavaEE——SpringMVC(10)--文件上传 CommonsMultipartResovler
    codeforces 460A Vasya and Socks 解题报告
    hdu 1541 Stars 解题报告
    hdu 1166 敌兵布阵 解题报告
    poj 2771 Guardian of Decency 解题报告
    hdu 1514 Free Candies 解题报告
    poj 3020 Antenna Placement 解题报告
    BestCoder5 1001 Poor Hanamichi(hdu 4956) 解题报告
    poj 1325 Machine Schedule 解题报告
  • 原文地址:https://www.cnblogs.com/wind-chaser/p/14353650.html
Copyright © 2011-2022 走看看