Guest User

Untitled

a guest
Feb 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width">
  6. <title>JS Bin</title>
  7. </head>
  8. <body>
  9.  
  10. <script id="jsbin-javascript">
  11. /**
  12. * @param {string[][]} accounts
  13. * @return {string[][]}
  14. */
  15.  
  16. function DSU(){
  17. var parent = new Array(8);
  18. for(var i=0; i<8; i++){
  19. parent[i] = i;
  20. }
  21.  
  22. return {
  23. find: function(x) {
  24. console.log('find parent ' + parent.toString())
  25. if(parent[x] !==x ){
  26. parent[x] = this.find(parent[x]);
  27. }
  28. return parent[x];
  29. },
  30. union: function(x, y){
  31. parent[this.find(x)] = this.find(y);
  32. console.log('union parent ' + parent.toString())
  33. }
  34. }
  35. }
  36.  
  37. var accountsMerge = function(accounts) {
  38. if(!accounts || accounts.length===0) return [];
  39. var dsu = DSU();
  40. var emailToName = {};
  41. var emailToID = {};
  42. var id = 0;
  43. for(var i=0; i<accounts.length; i++){
  44. var account = accounts[i];
  45. var name = account[0];
  46. for(var j=1; j<account.length; j++){
  47. var email = account[j];
  48. emailToName[email] = name;
  49. if(emailToID[email]===undefined) {
  50. emailToID[email] = id++;
  51. }
  52. console.log('dsu-union '+ account[1] + ':' + emailToID[account[1]] + ' ' + email + ':'+ emailToID[email])
  53. dsu.union(emailToID[account[1]], emailToID[email])
  54. }
  55. }
  56. console.log(emailToID);
  57. console.log(emailToName);
  58.  
  59. var ans = {};
  60. Object.keys(emailToID).forEach(email => {
  61. var index = dsu.find(emailToID[email]);
  62. console.log('email - index: '+ email + ' - ' + index);
  63. if(!ans[index]){
  64. ans[index] = [email]
  65. }else{
  66. ans[index].push(email);
  67. }
  68. console.log('ans', ans);
  69. });
  70.  
  71. Object.values(ans).forEach(list => {
  72. list.sort();
  73. list.unshift(emailToName[list[0]]);
  74. });
  75.  
  76. return Object.values(ans);
  77. };
  78.  
  79. var accounts = [
  80. ['hu', 'a', 'b', 'c'],
  81. ['hu', 'd', 'c', 'f'],
  82. ['he', 'e','k'],
  83. ['Le', 'm']
  84. ]
  85. console.log(accountsMerge(accounts));
  86. </script>
  87.  
  88.  
  89.  
  90. <script id="jsbin-source-javascript" type="text/javascript">/**
  91. * @param {string[][]} accounts
  92. * @return {string[][]}
  93. */
  94.  
  95. function DSU(){
  96. var parent = new Array(8);
  97. for(var i=0; i<8; i++){
  98. parent[i] = i;
  99. }
  100.  
  101. return {
  102. find: function(x) {
  103. console.log('find parent ' + parent.toString())
  104. if(parent[x] !==x ){
  105. parent[x] = this.find(parent[x]);
  106. }
  107. return parent[x];
  108. },
  109. union: function(x, y){
  110. parent[this.find(x)] = this.find(y);
  111. console.log('union parent ' + parent.toString())
  112. }
  113. }
  114. }
  115.  
  116. var accountsMerge = function(accounts) {
  117. if(!accounts || accounts.length===0) return [];
  118. var dsu = DSU();
  119. var emailToName = {};
  120. var emailToID = {};
  121. var id = 0;
  122. for(var i=0; i<accounts.length; i++){
  123. var account = accounts[i];
  124. var name = account[0];
  125. for(var j=1; j<account.length; j++){
  126. var email = account[j];
  127. emailToName[email] = name;
  128. if(emailToID[email]===undefined) {
  129. emailToID[email] = id++;
  130. }
  131. console.log('dsu-union '+ account[1] + ':' + emailToID[account[1]] + ' ' + email + ':'+ emailToID[email])
  132. dsu.union(emailToID[account[1]], emailToID[email])
  133. }
  134. }
  135. console.log(emailToID);
  136. console.log(emailToName);
  137.  
  138. var ans = {};
  139. Object.keys(emailToID).forEach(email => {
  140. var index = dsu.find(emailToID[email]);
  141. console.log('email - index: '+ email + ' - ' + index);
  142. if(!ans[index]){
  143. ans[index] = [email]
  144. }else{
  145. ans[index].push(email);
  146. }
  147. console.log('ans', ans);
  148. });
  149.  
  150. Object.values(ans).forEach(list => {
  151. list.sort();
  152. list.unshift(emailToName[list[0]]);
  153. });
  154.  
  155. return Object.values(ans);
  156. };
  157.  
  158. var accounts = [
  159. ['hu', 'a', 'b', 'c'],
  160. ['hu', 'd', 'c', 'f'],
  161. ['he', 'e','k'],
  162. ['Le', 'm']
  163. ]
  164. console.log(accountsMerge(accounts));</script></body>
  165. </html>
Add Comment
Please, Sign In to add comment