Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width">
- <title>JS Bin</title>
- </head>
- <body>
- <script id="jsbin-javascript">
- /**
- * @param {string[][]} accounts
- * @return {string[][]}
- */
- function DSU(){
- var parent = new Array(8);
- for(var i=0; i<8; i++){
- parent[i] = i;
- }
- return {
- find: function(x) {
- console.log('find parent ' + parent.toString())
- if(parent[x] !==x ){
- parent[x] = this.find(parent[x]);
- }
- return parent[x];
- },
- union: function(x, y){
- parent[this.find(x)] = this.find(y);
- console.log('union parent ' + parent.toString())
- }
- }
- }
- var accountsMerge = function(accounts) {
- if(!accounts || accounts.length===0) return [];
- var dsu = DSU();
- var emailToName = {};
- var emailToID = {};
- var id = 0;
- for(var i=0; i<accounts.length; i++){
- var account = accounts[i];
- var name = account[0];
- for(var j=1; j<account.length; j++){
- var email = account[j];
- emailToName[email] = name;
- if(emailToID[email]===undefined) {
- emailToID[email] = id++;
- }
- console.log('dsu-union '+ account[1] + ':' + emailToID[account[1]] + ' ' + email + ':'+ emailToID[email])
- dsu.union(emailToID[account[1]], emailToID[email])
- }
- }
- console.log(emailToID);
- console.log(emailToName);
- var ans = {};
- Object.keys(emailToID).forEach(email => {
- var index = dsu.find(emailToID[email]);
- console.log('email - index: '+ email + ' - ' + index);
- if(!ans[index]){
- ans[index] = [email]
- }else{
- ans[index].push(email);
- }
- console.log('ans', ans);
- });
- Object.values(ans).forEach(list => {
- list.sort();
- list.unshift(emailToName[list[0]]);
- });
- return Object.values(ans);
- };
- var accounts = [
- ['hu', 'a', 'b', 'c'],
- ['hu', 'd', 'c', 'f'],
- ['he', 'e','k'],
- ['Le', 'm']
- ]
- console.log(accountsMerge(accounts));
- </script>
- <script id="jsbin-source-javascript" type="text/javascript">/**
- * @param {string[][]} accounts
- * @return {string[][]}
- */
- function DSU(){
- var parent = new Array(8);
- for(var i=0; i<8; i++){
- parent[i] = i;
- }
- return {
- find: function(x) {
- console.log('find parent ' + parent.toString())
- if(parent[x] !==x ){
- parent[x] = this.find(parent[x]);
- }
- return parent[x];
- },
- union: function(x, y){
- parent[this.find(x)] = this.find(y);
- console.log('union parent ' + parent.toString())
- }
- }
- }
- var accountsMerge = function(accounts) {
- if(!accounts || accounts.length===0) return [];
- var dsu = DSU();
- var emailToName = {};
- var emailToID = {};
- var id = 0;
- for(var i=0; i<accounts.length; i++){
- var account = accounts[i];
- var name = account[0];
- for(var j=1; j<account.length; j++){
- var email = account[j];
- emailToName[email] = name;
- if(emailToID[email]===undefined) {
- emailToID[email] = id++;
- }
- console.log('dsu-union '+ account[1] + ':' + emailToID[account[1]] + ' ' + email + ':'+ emailToID[email])
- dsu.union(emailToID[account[1]], emailToID[email])
- }
- }
- console.log(emailToID);
- console.log(emailToName);
- var ans = {};
- Object.keys(emailToID).forEach(email => {
- var index = dsu.find(emailToID[email]);
- console.log('email - index: '+ email + ' - ' + index);
- if(!ans[index]){
- ans[index] = [email]
- }else{
- ans[index].push(email);
- }
- console.log('ans', ans);
- });
- Object.values(ans).forEach(list => {
- list.sort();
- list.unshift(emailToName[list[0]]);
- });
- return Object.values(ans);
- };
- var accounts = [
- ['hu', 'a', 'b', 'c'],
- ['hu', 'd', 'c', 'f'],
- ['he', 'e','k'],
- ['Le', 'm']
- ]
- console.log(accountsMerge(accounts));</script></body>
- </html>
Add Comment
Please, Sign In to add comment