淘天 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一样黄标提示
点赞 回复 分享
发布于 2024-04-11 16:36 山东

相关推荐

03-15 18:17
门头沟学院 Java
投递淘天集团等公司10个岗位
点赞 评论 收藏
分享
04-01 18:05
已编辑
门头沟学院 C++
本人bg2本9硕&nbsp;cpp技术栈3.6&nbsp;一面(60min):1.10min左右的项目拷打(重点都是问项目所用框架的基础知识,针对业务的问题很少,属于偏八股类型的提问)2.40min左右的八股拷打(1)sharedptr系列:多线程下安全性?weakptr用过没,weakptr怎么实现有没有思路?sharedptr源码看过吗?包含哪些成员变量?sharedptr有两种初始化方式,一种是new一个去初始化,另一种是makeshared,有什么区别吗?(2)cpp基础系列:c++11标准下一个类,什么也不写,它有哪些函数?假如你实现了这些函数中的某一个,剩下的默认函数会有变化吗?一个类,有两个成员函数,一个是虚函数,一个是正常的函数。初始化一个这个类的指针为nullptr,这个指针调用这两个函数会有什么效果?c++中初始化成员变量有两种方式,初始化列表和在构造函数中赋值,有什么区别?(3)cpp新特型系列:move的作用?为什么要有移动构造函数?优化了哪些地方?移动构造函数怎么实现?你说使用移动构造函数转移了资源,那么原来的资源会被释放吗?(4)os:操作系统的锁有哪些?自旋锁忙等待,为什么还要用自旋锁?(5)计网:tcp拥塞控制。3.手撕:翻转链表k个3.10&nbsp;二面(50min):全程项目+逻辑题,没一点八股和算法。项目:1.项目相关,使用了string&nbsp;view,讲和string区别。2.&nbsp;一个拥堵的消息队列,怎么缓解这个情况?(感觉像是在问高流量的时候怎么优化消息队列和线程池?)3.单例模式优点是什么?哪些变量可以用来做单例模式?4.打开一个文件,怎么能快速打开并显示?逻辑题:1.rand5&nbsp;rand7。2.一个数组判断有无重复数字。3.1g文件有1m内存可以用,怎么统计文件中单词出现频率前100?总结:两个面试官都很好,第一个全程都面带微笑,也有引导。第二个很有技术大佬的风范,即使我回答的就是一坨,最后在我反问的时候也巨有耐心。#我的失利项目复盘# #牛客在线求职答疑中心#
点赞 评论 收藏
分享
03-13 11:58
已编辑
武汉大学 C++
#牛客AI配图神器##腾讯求职进展汇总##腾讯##牛客创作赏金赛##暑期实习&nbsp;&nbsp;&nbsp;#📍面试公司:鹅#哪些公司面试官让你印象深刻?#👜面试岗位:PC客户端暑期实习📖面试问题:计网:tcp三握手、http和https区别&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;操作系统:进程间通信、存储管理、虚拟内存、多线程概念&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;语言特性:volatile关键字,&nbsp;stl特性&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设计模式:单例模式、简单工厂模式、观察者模式,要求会写单例模式代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拷打项目,我的项目是一个微小型数据库内核和包装的大作业,感觉答得还行......‘&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;手撕算法:LRU,链表去重,O(n)内从数组中找出所有出现两次的数🙌面试体验:一面面了2个小时40分钟,从7点到9点四十,问面试官为什么还没下班,面试官说他们那边下班比较弹性.................。二面1个小时,面试官是校友,给我过了。三面感觉寄了,面到后面面试官都没耐心了,总计40分钟,感觉在面的时候滔滔不绝,结果结束后一查百度,说的都是错的,不知道面试官什么心情#软件开发笔面经#
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务