8.13美团 扑克那题直接模拟不会超时吗??
直接模拟会走重复走很多次。 我用了并查集去优化(父节点和自己索引相等表示 该位置是空的, 并查集加上路径压缩后,应该能从直接模拟O(n2)优化到O(n)吧)寻找下一个空位置(第一次用赛码,不知道可以提交啊,只用了给定的测试用例,要是知道暴力能过的话,就不优化了)
现在能看笔试成绩嘛?都不知道对了多少
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(), idx = -1;
int[] p = new int[n];
for (int i = 0; i < n; i++) {
p[i] = i;
}
int[] cards = new int[n], ans = new int[n];
Arrays.fill(ans, -1);
for (int i = 0; i < n; i++) {
cards[i] = sc.nextInt();
}
idx = -1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 3; j++) {
idx = getP((idx + 1) % n, p);
}
ans[idx] = cards[i];
int t = (idx + 1) % n;
int p1 = getP(t, p);
p[idx] = p1;
}
for (int i = 0; i < n; i++) {
System.out.print(ans[i] + " ");
}
}
public static int getP(int son, int[] p) {
return p[son] = son == p[son] ? son : getP(p[son], p);
}
}
查看29道真题和解析