zoukankan      html  css  js  c++  java
  • 跟谁学0923笔试

    1、并查集2、交叉链表求交点

    import java.io.*;
    import java.util.*;
    import java.text.*;
    import java.math.*;
    import java.util.regex.*;
    
    public class Main3 {
        static int find(int[] p, int x) {
            if(p[x] != x) {
                p[x] = find(p,p[x]); // 路径压缩
            }
            return p[x];
        }
        static List<List<String>> mergeAccount(List<List<String>> accounts) {
            // 在此处编写实现代码逻辑
            List<List<String>> res = new ArrayList<>();
            int n = accounts.size();
            int[] p = new int[n]; // 祖宗节点
            for(int i=0; i < n; i++) p[i] = i;
            Map<String,List<Integer>> map = new HashMap<>();
            for(int i=0; i < n; i++) {
                for(int j=1; j < accounts.get(i).size(); j++) {
                    String mail = accounts.get(i).get(j);
                    if(map.containsKey(mail)) {
                        map.get(mail).add(i);
                    } else {
                        List<Integer> list = new ArrayList<>();
                        list.add(i);
                        map.put(mail, list);
                    }
                }
            }
            for(String mail : map.keySet()) {
                List<Integer> list = map.get(mail);
                //System.out.println(list);
                if(list.size() >= 2) {
                    int parent = find(p,list.get(0));
                    for(int i=0; i < list.size(); i++) {
                        p[find(p, list.get(i))] = parent;
                    }
                }
            }
            List<Set<String>> temp = new ArrayList<>();
            for(int i=0; i < n; i++) {
                temp.add(new HashSet<String>());
            }
            for(int i=0; i < n; i++) {
                int parent = find(p, i);
                for(int j=1;  j < accounts.get(i).size(); j++) {
                    temp.get(parent).add(accounts.get(i).get(j));
                }
            }
            for(int i=0; i < n; i++) {
                if(temp.get(i).size() > 0) {
                    List<String> mails = new ArrayList<>(temp.get(i));
                    //Collections.sort(mails);
                    res.add(mails);
                }
            }
            return res;
        }
        /******************************结束写代码******************************/
    
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
    
            int _count = Integer.parseInt(in.nextLine());
    
            int _i = 0;
            List<List<String>> _accounts = new ArrayList<List<String>>();
            while (_i++ < _count) {
                String _line = in.nextLine();
                String[] _item = _line.split(",");
                _accounts.add(Arrays.asList(_item));
            }
    
            List<List<String>> res = mergeAccount(_accounts);
    
            Collections.sort(res, new Comparator<List<String>>() {
    
                @Override
                public int compare(List<String> o1, List<String> o2) {
                    String aName1 = String.join(",", o1);
                    String aName2 = String.join(",", o2);
                    return aName1.compareTo(aName2);
                }
    
            });
    
            for (int res_i = 0; res_i < res.size(); res_i++) {
    
                List<String> resItem = res.get(res_i);
                System.out.println(String.join(",", resItem));
            }
        }
    }
    /*
    [
    
        ["John", "johnsmith@mail.com", "john00@mail.com"],
    
        ["John", "johnnybravo@mail.com"],
    
        ["John", "johnsmith@mail.com", "john_newyork@mail.com"],
    
        ["Mary", "mary@mail.com"]
    
    ]
    4
    "John", "johnsmith@mail.com", "john00@mail.com"
    "John", "johnnybravo@mail.com"
    "John", "johnsmith@mail.com", "john_newyork@mail.com"
    "Mary", "mary@mail.com"
    输出:
     "john_newyork@mail.com", "john00@mail.com", "johnsmith@mail.com"
     "johnnybravo@mail.com"
     "mary@mail.com"
    * */
    

    交叉单链表

    import java.io.*;
    import java.util.*;
    import java.text.*;
    import java.math.*;
    import java.util.regex.*;
    
    public class Main2 {
    
        public static class Node {
    
            private int data;
            private Node next;
    
            public int getData() {
                return data;
            }
    
            public void setData(int data) {
                this.data = data;
            }
    
            public Node getNext() {
                return next;
            }
    
            public void setNext(Node next) {
                this.next = next;
            }
        }
    
    
        /*请完成下面这个函数,实现题目要求的功能
        当然,你也可以不按照下面这个模板来作答,完全按照自己的想法来 ^-^
        ******************************开始写代码******************************/
        static Node getCommon(Node headA, Node headB) {
            int len1 = 0, len2 = 0;
            Node p = headA, q = headB;
            while(p!=null) {
                len1++;
                p = p.next;
            }
            p = headB;
            while(p!=null) {
                len2++;
                p = p.next;
            }
            p = headA; q = headB;
            if(len1 < len2) {
                int n = len2 - len1;
                for(int i=0; i < n; i++) q = q.next;
            }
            if(len1 > len2) {
                int n = len1 - len2;
                for(int i=0; i < n; i++) p = p.next;
            }
            while(p != null && q != null) {
                if(p == q) return p;
                p = p.next; q = q.next;
            }
            return null;
        }
        /******************************结束写代码******************************/
    
    
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
    
            String line1 = in.nextLine();
            String line2 = in.nextLine();
    
            Node headA = null;
            Node headB = null;
    
            Map<String, Node> map = new HashMap<String, Node>();
    
            if (line1 != null && line1.length() > 0) {
                String[] array1 = line1.split(",");
                headA = new Node();
                headA.setData(Integer.parseInt(array1[0].split("\(")[0]));
                map.put(array1[0], headA);
                Node pre = headA;
                for (int i = 1; i < array1.length; i++) {
                    Node node = map.get(array1[i]);
                    if (node == null) {
                        node = new Node();
                        node.setData(Integer.parseInt(array1[i].split("\(")[0]));
                        map.put(array1[i], node);
                    }
                    pre.next = node;
                    pre = node;
                }
            }
            if (line2 != null && line2.length() > 0) {
                String[] array2 = line2.split(",");
                headB = map.get(array2[0]);
                if (headB == null) {
                    headB = new Node();
                    headB.setData(Integer.parseInt(array2[0].split("\(")[0]));
                    map.put(array2[0], headB);
                }
                Node pre = headB;
                for (int i = 1; i < array2.length; i++) {
                    Node node = map.get(array2[i]);
                    if (node == null) {
                        node = new Node();
                        node.setData(Integer.parseInt(array2[i].split("\(")[0]));
                        map.put(array2[i], node);
                    }
                    pre.next = node;
                    pre = node;
                }
            }
    
            Node res = getCommon(headA, headB);
            System.out.println(res == null ? res : res.getData());
        }
    }
    
    
    
  • 相关阅读:
    Linux終端一行命令发送邮件
    团队冲刺2.4
    团队冲刺2.3
    团队冲刺2.2
    找水王
    评价win10自带输入法——微软拼音输入法
    梦断代码阅读笔记01
    团队冲刺2.1
    第十三周总结
    第十二周总结
  • 原文地址:https://www.cnblogs.com/lixyuan/p/13736879.html
Copyright © 2011-2022 走看看