File tree Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change
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
+ } ;
You can’t perform that action at this time.
0 commit comments