淘天 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 山东

相关推荐

头像
05-06 15:07
已编辑
天津工业大学
一面在4.17,隔了八天,中间两次重新发邮件跟我改时间时长30min,面试官还是非常友好的技术大佬,说话温柔有耐心。但是淘天两度改时间不电话沟通,发个邮件通知就完事让人有点难受面试过程:自我介绍哪个项目难度比较高,介绍一下项目的背景和功能在做项目之中遇到的最困难的问题我看这两个项目都是对用Vue来编写的,你有了解过React或者使用过吗一面对技术问题都有了考察,那我们二面就少涉及一些技术,问一问网络(??)所谓网络八股:1.从我们输入taobao.com到页面被加载完成,经历了什么,尽量详细地说;2.如何优化前端项目的加载速度;(回答了cdn和webpack相关的)3.提到CDN,能讲一讲CDN为什么能加快网页的加载吗;4.CDN是如何实现对就近分布服务器的访问的;(想到DNS没敢说,感觉有点没答到点上)5.提到OSS,能讲一讲OSS为什么能加快图片资源的加载吗;6.你刚刚提到的都是和网络有相关的优化,那从客户端角度如何优化呢;(提了GPU加速,脑子短路没想到别的,后面想起来路由懒加载应该算)7.我们知道script标签的加载有时会阻塞页面的加载,他是什么情况,如何解决;(script标签的defer,&nbsp;async)反问:1.天猫国际的业务是我们在淘宝上看到的那一部分吗,主要toC吗2.本次二面之后还有什么流程,答还有三面和hr面,不过三面和hr面可能会同时进行3.对我的学习有什么建议,面试官让加强基础&nbsp;:(&nbsp;,然后狠狠讲了CDN的原理和CDN如何应对双十一的爆发流量(感觉在拷打我前面的回答)更新:5.6约三面了
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务