腾讯研发部分编程题汇总做题笔记---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);
    }
}
相关推荐
leobertlan1 小时前
痛苦系列 | DSP-03 跨越单位圆:Z变换与零极点分析
算法·程序员
蛋蛋的就会顺顺的1 小时前
hot100 p0——栈,贪心算法,动态规划
java·前端·javascript·算法·leetcode·力扣
需要8262 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
开发小能手1232 小时前
答案daanC语言
数据结构·算法
小 黄 鸡2 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
Navigator_Z3 小时前
LeetCode //C - 1291. Sequential Digits
c语言·算法·leetcode
伯恩bourne4 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_4 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
pride.li5 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
省钱兄--zs5 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构