2023 阿里国际 阿里笔试 0918
笔试时间:2023年9月18日 秋招
第一题
题目:小红吃果子
有n棵树,每棵树的高度为ai,每棵树在bi的高度上有一个果子。小红从第一棵树的0高度位置开始,每次可以进行如下操作:
1、可以调整自身的高度,即从高度变为高度x + 1 或 x - 1,需要保证调整后高度仍然在0到ai之间;
2、或者从第棵树的高度移动到第i + 1棵树的高度,需要保证 x< ai+1;
小红始终不能超过所在树的高度,小红吃到所有果子,最少需要几次操作?
输入描述
第一行一个整数n,表示树的数量;
第二行n个整数ai,表示每棵树的高度;
第三行n个整数bi,表示每棵树上果子的高度。
1 <= n <= 10^5
1 <= bi <= ai < 10^9
输出描述
输出一个整数,表示最少需要的操作次数。
样例输入
5
3 4 5 6 7
1 2 3 4 5
样例输出
9
参考题解
贪心,直接上树和下树即可。
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
for (int i = 0; i < n; i++) {
a[i] = scanner.nextInt();
}
long ans = n - 1 + a[0];
for (int i = 0; i < n - 1; i++) {
ans += Math.abs(a[i + 1] - a[i]);
}
System.out.println(ans);
}
}
第二题
题目:小红做游戏
小红在和朋友们做游戏,包括小红一共n个人,大家围成了一个圈。第i个位置的人只记住了在他右手边的两个人,也就是说,位置1的人记住了位置2和位置3的人,位置n - 1的人记住了位置n和位置1的人。现在小红想知道,能不能还原出每个人的位置,如果有多种可能,任意输出一种即可,保证至少存在一种符合要求的情况。
输入描述
输入描述一行一个整数n,表示人数。
接下来n行,每行两个整数ai和bi,表示第i个人记住了第ai个人和第bi个人。 (bi不一定在ai的右边)。
3 <= n <= 10^5
1 <= ai, bi <= n
输出描述
还原出每个人的位置,输出一行n个整数,表示每个人的位置。
样例输入
5
2 3
4 3
4 5
1 5
2 1
样例输出
1 2 3 4 5
参考题解
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = 100004;
int[] a = new int[N];
int[] b = new int[N];
int n = scanner.nextInt();
int[] z = new int[N];
for (int i = 1; i <= n; i++) {
a[i] = scanner.nextInt();
b[i] = scanner.nextInt();
}
z[1] = 1;
z[2] = a[1];
z[3] = b[1];
if (!ok(n, a, b, z)) {
z[2] = b[1];
z[3] = a[1];
ok(n, a, b, z);
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2023秋招各大笔试题汇总,c++,java,python多种语言分析,解答。

