携程java笔试题目_携程 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 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());

}

}

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值