腾讯研发部分编程题汇总做题笔记---Java

朋友圈(后端开发卷)

现在有 105 个用户,编号为 1- 105,现在已知有 m 对关系,每一对关系给你两个数 x 和 y ,代表编号为 x 的用户和编号为 y 的用户是在一个圈子中,例如: A 和 B 在一个圈子中, B 和 C 在一个圈子中,那么 A , B , C 就在一个圈子中。现在想知道最多的一个圈子内有多少个用户。

数据范围:

1≤m≤2×10

6

进阶:空间复杂度 O(n) ,时间复杂度 O(nlogn)

时间限制:C/C++ 2秒,其他语言4秒

空间限制:C/C++ 256M,其他语言512M

输入描述:

第一行输入一个整数T,接下来有T组测试数据。

对于每一组测试数据:第一行输入1个整数n,代表有n对关系。

接下来n行,每一行输入两个数x和y,代表编号为x和编号为y的用户在同一个圈子里。

1 ≤ T ≤ 10

1 ≤ n ≤ 2*106

1 ≤ x, y ≤ 105

输出描述:

对于每组数据,输出一个答案代表一个圈子内的最多人数

示例1

输入例子:

2

4

1 2

3 4

5 6

1 6

4

1 2

3 4

5 6

7 8

输出例子:

4

2

ac代码
java 复制代码
// package tencent.tel.sum;

import java.util.Scanner;
class UnionFind {
    private int[] parent;
    private int[] size;
    private int count;

    public UnionFind(int n) {
        this.parent = new int[n];
        this.size = new int[n];
        this.count = n;
        for (int i = 0; i < n; i++) {
            parent[i] = i;
            size[i] = 1;
        }
    }

    public int find(int p) {
        while (p != parent[p]) {
            parent[p] = parent[parent[p]];
            p = parent[p];
        }
        return p;
    }

    public void union(int p, int q) {
        int rootP = find(p);
        int rootQ = find(q);
        if (rootP == rootQ) {
            return;
        }
        if (size[rootP] > size[rootQ]) {
            parent[rootQ] = rootP;
            size[rootP] += size[rootQ];
        } else {
            parent[rootP] = rootQ;
            size[rootQ] += size[rootP];
        }
        count--;
    }

    public int getMaxUnion(){
        int max = 1;
        for (int x:size)
            max = Math.max(max,x);
        return max;
    }
}

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T = in.nextInt();
        while(T-->0){
            int n = in.nextInt();
            UnionFind u = new UnionFind(100005);
            for (int i=0;i<n;i++)
                u.union(in.nextInt(), in.nextInt());
            System.out.println(u.getMaxUnion());
        }

    }
}


ac代码

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    int T = in.nextInt();
    while(T-->0){
        double A = in.nextDouble();
        double B = in.nextDouble();
        double C = in.nextDouble();
        if (A-2*B*C<=0) {
            System.out.println(0);
        continue;
        }
        double result = calculate(A,B,C);
        System.out.println(result);
        }
    }
    public static double calculate(double a,double b,double c){
        double y1 = a/b+Math.pow((a*a)/(b*b)-(2*a*c)/b,1.0/2);
        double y2 = a/b-Math.pow((a*a)/(b*b)-(2*a*c)/b,1.0/2);
        double result_1 = jifen(a,b,c,y1);
        double result_2 = jifen(a,b,c,y2);
        return result_1-result_2;
    }
    public static double jifen(double a,double b,double c,double y){
        return Math.pow(y,2)/(2*b)-(c*y)/b-Math.pow(y,3)/(6*a);
    }
}
相关推荐
卡尔特斯2 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源2 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole2 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫2 小时前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide3 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户3721574261353 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源3 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
CoovallyAIHub4 小时前
中科大DSAI Lab团队多篇论文入选ICCV 2025,推动三维视觉与泛化感知技术突破
深度学习·算法·计算机视觉
Java中文社群4 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心4 小时前
从零开始学Flink:数据源
java·大数据·后端·flink