欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式(單向構(gòu)造和雙向構(gòu)造)

Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式(單向構(gòu)造和雙向構(gòu)造)

熱門標(biāo)簽:無錫智能外呼系統(tǒng)好用嗎 地圖標(biāo)注與注銷 宿州電話機(jī)器人哪家好 成都呼叫中心外呼系統(tǒng)哪家強(qiáng) 西青語音電銷機(jī)器人哪家好 電梯新時達(dá)系統(tǒng)外呼顯示e 百應(yīng)電話機(jī)器人總部 旅游廁所地圖標(biāo)注怎么弄 南昌地圖標(biāo)注

題目描述

這是 LeetCode 上的 1743. 從相鄰元素對還原數(shù)組 ,難度為 中等。

Tag : 「哈希表」、「雙指針」、「模擬」

存在一個由 n 個不同元素組成的整數(shù)數(shù)組 nums ,但你已經(jīng)記不清具體內(nèi)容。好在你還記得 nums 中的每一對相鄰元素。
給你一個二維整數(shù)數(shù)組 adjacentPairs ,大小為 n - 1 ,其中每個 adjacentPairs[i] = [ui, vi] 表示元素 ui 和 vi 在 nums 中相鄰。
題目數(shù)據(jù)保證所有由元素 nums[i] 和 nums[i+1] 組成的相鄰元素對都存在于 adjacentPairs 中,存在形式可能是 [nums[i], nums[i+1]] ,也可能是 [nums[i+1], nums[i]] 。這些相鄰元素對可以 按任意順序 出現(xiàn)。

返回 原始數(shù)組 nums 。如果存在多種解答,返回 其中任意一個 即可。

示例 1:

輸入:adjacentPairs = [[2,1],[3,4],[3,2]]

輸出:[1,2,3,4]

解釋:數(shù)組的所有相鄰元素對都在 adjacentPairs 中。
特別要注意的是,adjacentPairs[i] 只表示兩個元素相鄰,并不保證其 左-右 順序。

示例 2:

輸入:adjacentPairs = [[4,-2],[1,4],[-3,1]]

輸出:[-2,4,1,-3]

解釋:數(shù)組中可能存在負(fù)數(shù)。
另一種解答是 [-3,1,4,-2] ,也會被視作正確答案。

示例 3:

輸入:adjacentPairs = [[100000,-100000]]

輸出:[100000,-100000]

提示:

  • nums.length == n
  • adjacentPairs.length == n - 1
  • adjacentPairs[i].length == 2
  • 2 = n = 10510^5105
  • -10510^5105 = nums[i], ui, vi = 10510^5105
  • 題目數(shù)據(jù)保證存在一些以 adjacentPairs 作為元素對的數(shù)組

單向構(gòu)造(哈希表計數(shù))

根據(jù)題意,由于所有的相鄰關(guān)系都會出現(xiàn)在 numsnumsnums 中,假設(shè)其中一個合法數(shù)組為 ansansans,長度為 nnn。

那么顯然 ans[0]ans[0]ans[0] 和 ans[n−1]ans[n - 1]ans[n−1] 在 numsnumsnums 中只存在一對相鄰關(guān)系,而其他 ans[i]ans[i]ans[i] 則存在兩對相鄰關(guān)系。

因此我們可以使用「哈希表」對 numsnumsnums 中出現(xiàn)的數(shù)值進(jìn)行計數(shù),找到“出現(xiàn)一次”的數(shù)值作為 ansansans 數(shù)值的首位,然后根據(jù)給定的相鄰關(guān)系進(jìn)行「單向構(gòu)造」,為了方便找到某個數(shù)其相鄰的數(shù)是哪些,我們還需要再開一個「哈希表」記錄相鄰關(guān)系。

Java 代碼:

class Solution {
    public int[] restoreArray(int[][] aps) {
        int m = aps.length, n = m + 1;
        MapInteger, Integer> cnts = new HashMap>();
        MapInteger, ListInteger>> map = new HashMap>();
        for (int[] ap : aps) {
            int a = ap[0], b = ap[1];
            cnts.put(a, cnts.getOrDefault(a, 0) + 1);
            cnts.put(b, cnts.getOrDefault(b, 0) + 1);
            ListInteger> alist = map.getOrDefault(a, new ArrayList>());
            alist.add(b);
            map.put(a, alist);
            ListInteger> blist = map.getOrDefault(b, new ArrayList>());
            blist.add(a);
            map.put(b, blist);
        }
        int start = -1;
        for (int i : cnts.keySet()) {
            if (cnts.get(i) == 1) {
                start = i;
                break;
            }
        }
        int[] ans = new int[n];
        ans[0] = start;
        ans[1] = map.get(start).get(0);
        for (int i = 2; i  n; i++) {
            int x = ans[i - 1];
            ListInteger> list = map.get(x);
            for (int j : list) {
                if (j != ans[i - 2]) ans[i] = j;
            }
        }
        return ans;
    }
}

Python 3 代碼:

class Solution:
    def restoreArray(self, adjacentPairs: List[List[int]]) -> List[int]:
        m = n = len(adjacentPairs)
        n += 1
        cnts = defaultdict(int)
        hashmap = defaultdict(list)
        for a, b in adjacentPairs:
            cnts[a] += 1
            cnts[b] += 1
            hashmap[a].append(b)
            hashmap[b].append(a)
        start = -1
        for i, v in cnts.items():
            if v == 1:
                start = i
                break
        ans = [0] * n
        ans[0] = start
        ans[1] = hashmap[start][0]
        for i in range(2, n):
            x = ans[i - 1]
            for j in hashmap[x]:
                if j != ans[i - 2]:
                    ans[i] = j
        return ans
  • 時間復(fù)雜度:O(n)O(n)O(n)
  • 空間復(fù)雜度:O(n)O(n)O(n)

雙向構(gòu)造(雙指針)

在解法一中,我們通過「哈希表」計數(shù)得到 ansansans 首位的原始作為起點,進(jìn)行「單向構(gòu)造」。
那么是否存在使用任意數(shù)值作為起點進(jìn)行的雙向構(gòu)造呢?
答案是顯然的,我們可以利用 ansansans 的長度為 2=n=1052 = n = 10^52=n=105,構(gòu)造一個長度 10610^6106 的數(shù)組 qqq(這里可以使用 static 進(jìn)行加速,讓多個測試用例共享一個大數(shù)組)。

這里 qqq 數(shù)組不一定要開成 1e61e61e6 大小,只要我們 qqq 大小大于 ansansans 的兩倍,就不會存在越界問題。

從 qqq 數(shù)組的 中間位置 開始,先隨便將其中一個元素添加到中間位置,使用「雙指針」分別往「兩邊拓展」(l 和 r 分別指向左右待插入的位置)。

當(dāng) l 指針和 r 指針直接已經(jīng)有 nnn 個數(shù)值,說明整個 ansansans 構(gòu)造完成,我們將 [l+1,r−1][l + 1, r - 1][l+1,r−1] 范圍內(nèi)的數(shù)值輸出作為答案即可。

Java 代碼:

class Solution {
    static int N = (int)1e6+10;
    static int[] q = new int[N];
    public int[] restoreArray(int[][] aps) {
        int m = aps.length, n = m + 1;
        MapInteger, ListInteger>> map = new HashMap>();
        for (int[] ap : aps) {
            int a = ap[0], b = ap[1];
            ListInteger> alist =  map.getOrDefault(a, new ArrayList>());
            alist.add(b);
            map.put(a, alist);
            ListInteger> blist = map.getOrDefault(b, new ArrayList>());
            blist.add(a);
            map.put(b, blist);
        }
        int l = N / 2, r = l + 1;
        int std = aps[0][0];
        ListInteger> list = map.get(std);
        q[l--] = std;
        q[r++] = list.get(0);
        if (list.size() > 1) q[l--] = list.get(1);
        while ((r - 1) - (l + 1) + 1  n) {
            ListInteger> alist = map.get(q[l + 1]);
            int j = l;
            for (int i : alist) {
                if (i != q[l + 2]) q[j--] = i;
            }
            l = j;

            ListInteger> blist = map.get(q[r - 1]);
            j = r;
            for (int i : blist) {
                if (i != q[r - 2]) q[j++] = i;
            }
            r = j;
        }
        int[] ans = new int[n];
        for (int i = l + 1, idx = 0; idx  n; i++, idx++) {
            ans[idx] = q[i];
        }
        return ans;
    }
}

Python 3 代碼:

class Solution:
    N = 10 ** 6 + 10
    q = [0] * N

    def restoreArray(self, adjacentPairs: List[List[int]]) -> List[int]:
        m = len(adjacentPairs)
        n = m + 1
        hashmap = defaultdict(list)
        for a, b in adjacentPairs:
            hashmap[a].append(b)
            hashmap[b].append(a)
        l = self.N // 2
        r = l + 1
        std = adjacentPairs[0][0]
        lt = hashmap[std]
        self.q[l] = std
        l -= 1
        self.q[r] = lt[0]
        r += 1
        if len(lt) > 1:
            self.q[l] = lt[1]
            l -= 1
        while (r-1)-(l+1)+1n:
            alt = hashmap[self.q[l+1]]
            j = l
            for i in alt:
                if i != self.q[l+2]:
                    self.q[j] = i
                    j -= 1
            l = j
            
            blt = hashmap[self.q[r-1]]
            j = r
            for i in blt:
                if i != self.q[r - 2]:
                    self.q[j] = i
                    j += 1
            r = j
        ans = [0] * n
        for idx in range(n):
            ans[idx] = self.q[idx+l+1]
        return ans

時間復(fù)雜度:O(n)O(n)O(n)
空間復(fù)雜度:O(n)O(n)O(n)

最后

到此這篇關(guān)于Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式(單向構(gòu)造和雙向構(gòu)造)的文章就介紹到這了,更多相關(guān)Python 相鄰還原數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python使用zip合并相鄰列表項的方法示例
  • 利用python求相鄰數(shù)的方法示例
  • Python selenium 父子、兄弟、相鄰節(jié)點定位方式詳解

標(biāo)簽:贛州 雅安 西安 辛集 渭南 許昌 七臺河 濰坊

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式(單向構(gòu)造和雙向構(gòu)造)》,本文關(guān)鍵詞  Python,根據(jù),相鄰關(guān)系,還原,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式(單向構(gòu)造和雙向構(gòu)造)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python 根據(jù)相鄰關(guān)系還原數(shù)組的兩種方式(單向構(gòu)造和雙向構(gòu)造)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    voyeur盗摄精品| 欧美日韩精品欧美日韩精品| 亚洲精品一区二区三区蜜桃下载 | av成人免费在线| 99热6这里只有精品| 26uuu欧美| 另类小说图片综合网| 国产制服丝袜在线| 日韩免费性生活视频播放| 日本在线不卡一区| 极品粉嫩小仙女高潮喷水久久| 91精品啪在线观看国产60岁| 亚洲国产wwwccc36天堂| 一区二区三区四区影院| 7777精品伊人久久久大香线蕉完整版 | 国产视频一区不卡| 国产在线视频一区二区三区| 成人性生交大片免费看无遮挡aⅴ| 久久久久97国产精华液好用吗| 激情六月婷婷综合| 精品丰满少妇一区二区三区| 国产精品系列在线| 北条麻妃一区二区三区| 欧洲一区在线电影| 亚洲妇女屁股眼交7| 天堂久久久久久| 精品国产乱码久久久久久闺蜜| 精品写真视频在线观看| 天海翼在线视频| 亚洲视频每日更新| www.美色吧.com| 日韩精品在线一区| 国产精品一区二区三区网站| 国产一区二区视频在线观看免费| 亚洲美女屁股眼交| 国产免费一区二区三区最新6| 精品日韩欧美在线| 国产河南妇女毛片精品久久久| 色综合视频一区二区三区高清| 亚洲综合丝袜美腿| caopeng视频| 国产精品毛片久久久久久| 91丨porny丨国产入口| 91精品国产综合久久福利软件| 蜜臀99久久精品久久久久久软件| 一区二区三区在线播放视频| 亚洲精品久久嫩草网站秘色| 黄色片视频免费观看| 国产日韩欧美麻豆| 亚洲欧洲日韩综合| 精品福利二区三区| 99视频国产精品| 日韩欧美中文一区二区| 国产成人夜色高潮福利影视| 欧美视频在线不卡| 韩国女主播成人在线| 在线中文字幕不卡| 麻豆精品一区二区| 日本精品视频一区二区| 免费在线成人网| 日本精品一区二区三区四区的功能| 奇米色一区二区三区四区| 日本黄色录像视频| 婷婷丁香激情综合| 国产一区二区播放| 美女www一区二区| 91久久精品一区二区三| 久久国产精品72免费观看| 在线精品视频免费观看| 久久av中文字幕片| 欧美三级日韩三级| 国产精品123| 91精品国产综合久久久久久 | 精品久久国产老人久久综合| 成人综合婷婷国产精品久久免费| 在线电影国产精品| 成人精品视频.| 精品国产乱码久久久久久闺蜜 | 欧美性大战久久| 国产精品自拍一区| 欧美一级日韩不卡播放免费| 99久久久久免费精品国产 | 激情综合色综合久久| 欧美三级三级三级爽爽爽| 国产成人综合精品三级| 欧美一区二区黄色| 91香蕉视频mp4| 亚洲国产精品传媒在线观看| 国产精品无码网站| 亚洲最大成人网4388xx| 青青青视频在线免费观看| 日本中文一区二区三区| 欧美色图一区二区三区| 成人精品免费视频| 久久久久久麻豆| 精品夜夜澡人妻无码av| 亚洲一线二线三线久久久| 182在线观看视频| 精品一区二区精品| 日韩一区二区三区视频| 免费看三级黄色片| 亚洲欧美区自拍先锋| 天天操夜夜操av| 国产另类ts人妖一区二区| 精品久久久久99| 亚洲天堂成人av| 午夜精品爽啪视频| 欧美色综合网站| 91麻豆自制传媒国产之光| 中文字幕中文字幕一区二区| 女教师淫辱の教室蜜臀av软件| 久久精品国产精品亚洲综合| 这里只有精品电影| 制服丝袜第一页在线观看| 亚洲自拍偷拍九九九| 色狠狠色狠狠综合| 99在线精品一区二区三区| 亚洲天堂免费在线观看视频| 黑鬼狂亚洲人videos| 国产·精品毛片| 亚洲国产高清aⅴ视频| 日韩av片在线免费观看| 国产一本一道久久香蕉| 国产亚洲一区字幕| 波多野结衣家庭教师在线观看| 久久99精品久久久久久国产越南| 欧美电影精品一区二区| 亚洲精品成人无码熟妇在线| 麻豆精品久久精品色综合| 日韩欧美卡一卡二| 欧美成人午夜精品免费| 日本不卡在线视频| 精品久久久久久久久久久久包黑料 | 视频精品一区二区| 日韩一卡二卡三卡国产欧美| 少妇户外露出[11p]| 毛片av一区二区三区| 2021中文字幕一区亚洲| 精品人体无码一区二区三区| 国产精品996| 亚洲欧洲三级电影| 欧美偷拍一区二区| 成人午夜精品无码区| 免费的成人av| 国产亚洲精品中文字幕| 污污的视频在线免费观看| 97超碰欧美中文字幕| 亚洲成精国产精品女| 欧美一区二区三区在线电影| 搡老熟女老女人一区二区| 久草精品在线观看| 国产精品国产三级国产三级人妇 | 中文字幕无码日韩专区免费| 成人网男人的天堂| 依依成人综合视频| 91精品一区二区三区久久久久久| 强伦人妻一区二区三区| 国产精品77777竹菊影视小说| 中文字幕在线一区二区三区| 欧美视频一区二区在线观看| 亚洲av片不卡无码久久| 国产一区二区三区四区在线观看| 亚洲视频在线一区观看| 欧美精品在欧美一区二区少妇| 熟女俱乐部一区二区视频在线| 国产成人高清在线| 亚洲综合无码一区二区| 精品国产乱码久久久久久1区2区| 国产真实乱在线更新| 制服.丝袜.亚洲.中文.综合懂 | 欧美日本一道本| 中文字幕第4页| 不卡一区二区中文字幕| 婷婷六月综合网| 日本一区二区免费在线| 欧美日韩一区二区三区在线| 国产又黄又粗的视频| 一级黄色免费毛片| 老司机精品视频在线| 成人免费视频在线观看| 欧美一级久久久久久久大片| 国产在线观看免费视频软件| 性欧美18—19sex性高清| 国内精品国产成人国产三级粉色| 亚洲欧美日韩久久精品| 日韩欧美中文一区| 91成人看片片| 精品手机在线视频| 91人妻一区二区| 高清久久久久久| 日韩av一区二区三区四区| 国产精品久久久久久妇女6080| 91精品在线一区二区| 国产少妇在线观看| 性欧美13一14内谢| 亚洲精品一二三四| 高清在线不卡av| 久久www免费人成看片高清| 亚洲综合区在线| 亚洲国产激情av|