Skip to content

Commit 91cf223

Browse files
authored
Create 1743-restore-the-array-from-adjacent-pairs.js
1 parent a7205ff commit 91cf223

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @param {number[][]} adjacentPairs
3+
* @return {number[]}
4+
*/
5+
const restoreArray = function(pairs) {
6+
const m = {}
7+
for(let e of pairs) {
8+
const [k, v] = e
9+
if(m[k] == null) m[k] = new Set()
10+
if(m[v] == null) m[v] = new Set()
11+
m[k].add(v)
12+
m[v].add(k)
13+
}
14+
const q = [pairs[0]]
15+
let res = pairs[0]
16+
m[res[0]].delete(res[1])
17+
m[res[1]].delete(res[0])
18+
let n = pairs.length
19+
while(n) {
20+
const front = res[0], rear = res[res.length - 1]
21+
22+
if(m[front]) {
23+
const newf = [...m[front].values()][0]
24+
if(m[front].size) res.unshift(newf)
25+
if(m[front]) m[front].delete(newf)
26+
if(m[newf]) m[newf].delete(front)
27+
if(m[front].size === 0) delete m[front]
28+
}
29+
30+
if(m[rear]) {
31+
const newr = [...m[rear].values()][0]
32+
if(m[rear].size) res.push(newr)
33+
if(m[rear]) m[rear].delete(newr)
34+
if(m[newr]) m[newr].delete(rear)
35+
if(m[rear].size === 0) delete m[rear]
36+
}
37+
n--
38+
}
39+
40+
return res
41+
};

0 commit comments

Comments
 (0)