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); } }