淘天 4.10 笔试

是不是我审题的问题,第一题暴力只能过0.09,40分钟死磕第三题只过了0.06,第三题到底该怎么做啊

我好像是这么写的,没法调试,也没有记录

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        UF uf = new UF(n);
        int u,v;
        StringBuilder ans = new StringBuilder();
        for (int i = 0; i < m; i++) {
            u = scan.nextInt();
            v = scan.nextInt();
            if(uf.union(u,v)) ans.append("Yes");
            else ans.append("No");
            ans.append('\n');
        }
        System.out.println(ans);
    }


}
class UF {
    private int count;
    private int[] parent;
    private int[] size;
    Set<Long> set;//记录重边
    boolean[] dup;//记录重边集合
    boolean[]circle;//记录有环的集合
    public UF(int n) {
        this.count = n;
        parent = new int[n];
        size = new int[n];
        circle = new boolean[n];
        dup = new boolean[n];
        for (int i = 0; i < n; i++) {
            parent[i] = i;
            size[i] = 1;
        }
    }


    public boolean union(int p, int q) {
        int rootP = find(p);
        int rootQ = find(q);
        boolean d = set.contains(pair(p,q))||set.contains(pair(q,p))||p ==q;//重边或者自环就不能是
        set.add(pair(p,q));
        set.add(pair(q,p));
        dup[rootP] = d;
        dup[rootQ] = d;
        if (rootP == rootQ) {
            circle[rootP] = true;
            return !dup[rootP];
        }
        // 平衡性优化
        if (size[rootP] < size[rootQ]) {
            parent[rootP] = rootQ;
            size[rootQ] += size[rootP];
        } else {
            parent[rootQ] = rootP;
            size[rootP] += size[rootQ];
        }
        return (circle[rootP]||circle[rootQ])&&!(dup[rootP]||dup[rootQ]);
    }
    private int find(int x) {
        if (parent[x] != x) {
            parent[x] = find(parent[x]);
        }
        return parent[x];
    }
    private long pair(int x,int y){
        return ((long)x<<32)+y;
    }




}



全部评论
想起来我pair好像没把x强转long,牛客的编辑器好像不会像idea一样黄标提示
点赞
送花
回复
分享
发布于 04-11 16:36 山东

相关推荐

3.20&nbsp;投递3.21&nbsp;笔试邀请&nbsp;3.27&nbsp;笔试4.8&nbsp;一面&nbsp;4.10出结果约二面4.12&nbsp;二面&nbsp;4.17出结果约hr面4.18&nbsp;hr面4.19&nbsp;oc🔥🔥一面内容电话面,40mins左右,面试官人不错,会补充我没讲到的点并引导我,中间有段表达有点混乱还提醒我注意分点表达1.项目相关●介绍项目●为什么选择completableFuture?还有什么异步查询的方式?countdownLauch和completableFuture类有什么区别?我提到底层实现原理不一样,面试官补充completableFuture可以有返回结果而countdownLauch没有●项目中怎么用mysql和redis的?2.redisredis的数据结构?●跳表如何实现?与树结构相比有什么优势?查询和删除的时间复杂度是多少?3.mysqlob+树相对于b树的优势?相比于红黑树呢?●聚簇索引与非聚簇索引?4.kafka如何保证消息不会丢失?我讲了生产者ack机制,但是没讲到副本,于是面试官通过下面几个问题逐步引导●主从同步过程中leader挂了,怎么办?●有了解过ISR么?ooffset如何实现?●如何保证消息不会重复消费?5.场景题●从上面offset如何实现的问题展开,问如何使用redis或mysql去保证id不重复?我提了redis用分布式锁,mysql用主键或号段模式继续追问是否可以用redis集合实现?布隆过滤器了解吗,能不能用在这个场景下?了解,但是没回答上来,可能是用布隆过滤器先前置地判断两个id是否重复🔥🔥二面内容视频面,深挖项目,问题没啥参考价值,技术上让我介绍下kafka以及如何运用在项目中的🔥🔥HR面内容●&nbsp;&nbsp;自我介绍●为什么不继续留在上家公司实习?●对部门业务有什么了解?如何胜任这份工作?学习或实习中比较有挑战性的case?●过去二十几年里对你影响比较大的人或事?●手里有什么&nbsp;offer?🔥🔥🔥🔥还未投递的老哥欢迎:👉&nbsp;【淘天内推链接】https://talent.taotian.com/campus/qrcode/home?code=L4PGnjjGYz00uX_Ucjt55w==#25届暑期实习##淘天##暑假实习##面经##内推#
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务