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



}


#美团笔试#
全部评论
想复杂了,直接模拟就能过
1 回复 分享
发布于 2022-08-13 21:40
提交记录那儿有通过多少
点赞 回复 分享
发布于 2022-08-13 20:24

相关推荐

我即大橘:耐泡王
点赞 评论 收藏
分享
评论
1
2
分享
牛客网
牛客企业服务