选择10 + 编程2
笔试很简单,应该没hc了。。
选择题问到了split和indexOf分割字符串的效率问题,亲测indexOf的效率高于split
编程
T1 给出一个链表,可以进行删除操作,使得相邻节点和为奇数,并且链表长度尽可能大。
public ListNode longestList (ListNode head) {
ListNode p = head;
while (p != null && p.next != null) {
if (p.val % 2 == 0) {
while (p.next != null && p.next.val % 2 == 0) {
p.next = p.next.next;
}
}else {
while (p.next != null && p.next.val % 2 != 0) {
p.next = p.next.next;
}
}
p = p.next;
}
return head;
}
思路:可以看出整个链表必须要 奇 偶 奇 偶 这样子分布,只要删除相邻重复的即可。
T2 从两个数组里选数字,使得乘积最大
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = Integer.parseInt(sc.nextLine());
String[] info = sc.nextLine().split(" ");
String color = sc.nextLine();
ArrayList<Integer> redList = new ArrayList<>();
ArrayList<Integer> blueList = new ArrayList<>();
for (int i = 0; i < n; i++) {
if (color.charAt(i) == 'B') {
blueList.add(Integer.parseInt(info[i]));
}else {
redList.add(Integer.parseInt(info[i]));
}
}
redList.sort(null);
blueList.sort(null);
long max = Math.max(((long) redList.get(0) * blueList.get(0)),((long) redList.get(redList.size() - 1) * blueList.get(blueList.size() - 1)));
System.out.println(max);
}
思路:主要就是有负数的情况,只需要排序后取Math.max(头 * 头, 尾 * 尾)即可,如果使用int只能通过60+,使用long就能ac
#哔哩哔哩##笔试##笔经##秋招##校招#