携程 Java后端 2019.4.8笔试

第一题:
判断输入字母链表有没有环,无脑暴力了,没用到快慢指针。

public static void main(String[] args) {
    Scanner cin = new Scanner(System.in);

    String line = cin.nextLine();
    String[] arr = line.split(",");

    boolean cycle = false;
    HashSet<String> set = new HashSet<>();

    for (int i = 0; i < arr.length; i++) {
        if (set.contains(arr[i])) {
            cycle = true;
        }
        set.add(arr[i]);
    }

    System.out.println(cycle);
}

第二题:
分段翻转链表

private static class Node {
    private String value;
    private Node next;

    public Node(String value) {
        this.value = value;
    }
}

public static void main(String[] args) {
    Scanner cin = new Scanner(System.in);

    String line = cin.nextLine();
    String[] arr = line.substring(1, line.length() - 1).split(",");
    int k = cin.nextInt();

    // 头指针
    Node root = null;
    root = new Node("Head");

    // 构造链表
    Node ptr = root;
    for (int i = 0; i < arr.length; i++) {
        ptr.next = new Node(arr[i]);
        ptr = ptr.next;
    }

    if (k > 1 && arr.length > 1) {
        // 计算翻转次数
        int reverseNumber = arr.length / k;

        Node ptr0 = root;
        Node ptr1 = ptr0.next;
        Node ptr2 = ptr1.next;
        Node ptr3 = ptr2.next;
        for (int i = 0; i < reverseNumber; i++) {
            for (int j = 0; j <= k - 2; j++) {
                ptr2.next = ptr1;
                ptr1 = ptr2;
                ptr2 = ptr3;
                if (ptr2 != null) {
                    ptr3 = ptr2.next;
                } else {
                    ptr3 = null;
                }
            }
            ptr0.next.next = ptr2;
            Node temp = ptr0.next;
            ptr0.next = ptr1;

            ptr0 = temp;
            ptr1 = ptr0.next;
            ptr2 = ptr1 != null ? ptr1.next : null;
            ptr3 = ptr2 != null ? ptr2.next : null;
        }
    }

    print(root);

}

private static void print(Node root) {
    StringBuilder sb = new StringBuilder();
    sb.append("[");
    for (Node i = root.next; i != null; i = i.next) {
        sb.append(i.value).append(",");
    }
    sb.deleteCharAt(sb.length() - 1);
    sb.append("]");
    System.out.println(sb.toString());
}

第三题:
题意没看太明白,无脑暴力了。

public static void main(String[] args) {
    Scanner cin = new Scanner(System.in);

    int n = cin.nextInt();
    String[] arr = new String[n];

    for (int i = 0; i < n; i++) {
        arr[i] = cin.next();
    }

    int[] countArr = new int[n];
    for (int i = 0; i < n; i++) {
        int count = 1;
        for (int j = 0; j < i; j++) {
            if (math(arr[j], arr[i])) {
                count++;
            }
        }
        countArr[i] = count;
    }

    for (int i = 0; i < n; i++) {
        print(arr[i], countArr[i]);
        System.out.print(" ");
    }
    System.out.println();
}

private static boolean math(String path1, String path2) {
    if (path1 == null || path2 == null) {
        return false;
    }

    if (path1.endsWith("/")) {
        path1 = path1.substring(0, path1.length() - 1);
    }

    if (path2.endsWith("/")) {
        path2 = path2.substring(0, path2.length() - 1);
    }

    return path1.equals(path2);
}

private static void print(String path, int count) {
    String[] pathArr = path.split("/");

    if (pathArr.length == 2) {
        System.out.print(1);
    } else if (pathArr.length == 3) {
        System.out.print(11);
    } else {
        StringBuilder sb = new StringBuilder();
        sb.append(1);
        for (int i = 0; i < pathArr.length - 3; i++) {
            sb.append(count);
        }
        sb.append(1);
        System.out.print(sb.toString());
    }
}

要疯,选择题赶上行测了,全程蒙圈,算法题看不懂题意,看来又凉凉了。

#携程##笔试题目##春招##Java##题解#
全部评论
其实都是字符串处理题,第一题同set,第二题也没必要构造,直接substring掉头尾,然后split,每k个倒序存入arraylist,然后tostring输出。最后一个给理解错了没过。
点赞 回复
分享
发布于 2019-04-08 22:34
第一题用Map会不会被打死
点赞 回复
分享
发布于 2019-04-08 22:50
博乐游戏
校招火热招聘中
官网直投
我也暴力了,但是官方说暴力破解不得分啊
点赞 回复
分享
发布于 2019-04-08 23:03
第三题前缀树吧,节点是每级的单词,每节点处在设置出现次数的变量,输出每建立时的此节点出行次数+1,时间有限,只有个思路,没能实现😂
点赞 回复
分享
发布于 2019-04-08 23:46
第三题开个hashmap判重就行,可以不暴力
点赞 回复
分享
发布于 2019-04-09 07:47
第三题 前缀树 但是有个家叫就是 相同的路径要用同一个前缀树
点赞 回复
分享
发布于 2019-04-09 08:07
第一题这样做能够ac吗
点赞 回复
分享
发布于 2019-04-09 08:42

相关推荐

头像
不愿透露姓名的神秘牛友
03-13 14:57
点赞 评论 收藏
转发
点赞 25 评论
分享
牛客网
牛客企业服务