秋招突击——8/13——并查集——复习{有塔一面}——新作{亲戚关系}

news2024/11/17 1:38:07

文章目录

    • 引言
    • 复习
      • 并查集模板
      • 复习——有塔一面
    • 新作
      • 亲戚关系
    • 总结

引言

  • 这两天准备腾讯的第二面,看了很多人的面经,发现考并查集的题目蛮多的,这里整理学习一下!

复习

并查集模板

  • 这里学习了B站的麦克老师的课程,对应链接如下并查集课程。
  • 对应模板代码如下
// 初始化
int fa[MAXN];
void init(int n){
	for(int i = 1;i <= n;i ++){
		fa[i] = i;
	}
}

// 路径压缩指定父节点
int find(int i){
	if(i == fa[i]){
		return i;
	]else{
		fa[i] = find[fa[i]];
		return fa[i];
	}
}

// 合并对应的节点
void union(int i ,int j){
	int i_fa = find(i); // 找到i的父节点
	int j_fa = find(j); // 找到j的父节点
	fa[i_fa] = j_fa;  // i的祖先指向j的祖先,实现合并

复习——有塔一面

  • 第一次学习连接
  • 第二次学习连接

在这里插入图片描述

  • 第一个是阈值,第二个是节点的数量,后续就是具体的节点的坐标,如果节点的距离小于阈值,表示两者之间有关系,然后关系具有传递性!
import java.util.*;

class Main{

    static int[] fa;

    private static void init(int m){
        for(int i = 0; i < m; i++){
            fa[i] = i;
        }
    }

    private static int find(int i){
        if(fa[i] == i){
            return i;
        }else{
            fa[i] = find(fa[i]);
            return fa[i];
        }
    }

    private static void union(int i ,int j){
        int i_fa = find(i);
        int j_fa = find(j);
        fa[i_fa] = j_fa;
    }

    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        float edge = in.nextFloat();
        int m = in.nextInt();
        float[][] points = new float[m][2];
        for(int i = 0;i < m;i ++){
            points[i][0] = in.nextFloat();
            points[i][1] = in.nextFloat();
        }

        // 计算邻接矩阵
        fa = new int[m];
        init(m);
        for (int i = 0; i < points.length; i++){
            for (int j = i + 1; j < points.length; j++){
                if(Math.pow(points[i][0] - points[j][0],2) + Math.pow(points[i][1] - points[j][1],2) <= edge * edge ){
                    union(i,j);
                }
            }
        }

        // 遍历相同父子节点的点
        Map<Integer, List<Integer>> map = new HashMap<>();

        for(int i = 0;i < m;i ++) {
            map.computeIfAbsent(find(i), k -> new ArrayList<>()).add(i);
        }

        for (int x:map.keySet()){
            System.out.println(map.get(x).toString());
        }
    }
}

在这里插入图片描述
整体来说,并不难,实现起来,还是蛮快的,有长进,之前看了GPT的,根本看不进去,当时心里比较躁,现在好很多了!

新作

亲戚关系

  • 下述题目是B站麦克老师讲算法实例题目,这里学了之后,再做一遍!
    在这里插入图片描述
  • 这个题目,主要是传递性,也就是并查集典型应用,如果彼此有共同的父节点,就表示是亲戚!

输入样例如下

10 7
2 4
5 7
1 3
8 9
1 2
5 6
2 3
3
3 4
7 10
8 9

具体实现代码

import java.util.Scanner;

class Main{
    private static int[] fa;

    // 并查集初始化
    private static void init(int m){
        for(int i = 1;i <= m;i ++) fa[i] = i;
    }

    // 查询父节点
    private static int find(int i){
        if(fa[i] == i)  return i;
        else {
            fa[i] = find(fa[i]);
            return fa[i];
        }
    }

    // 并查集并联
    private static void union(int i,int j){
        int i_fa = find(i);
        int j_fa = find(j);
        fa[i_fa] = j_fa;
    }

    public static void main(String args[]){
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        fa = new int[m + 1];
        init(m );

        // 关联不同节点之间的关系
        for (int i =0;i < n;i ++) {
            int x = in.nextInt();
            int y = in.nextInt();
            union(x, y);
        }

        // 进行提问
        int count = in.nextInt();
        for(int i = 0;i < count; i++){
            int x = in.nextInt();
            int y = in.nextInt();
            if(find(x) == find(y))
                System.out.println("YES");
            else
                System.out.println("NO");
        }
    }
}

在这里插入图片描述

总结

  • 这个并查集算是做完了,但是仅仅是掌握了最基础的,怎么按秩优化还没有弄,这里先跳过吧!
  • 我得专注于自身,尽力去准备,能成就成,不能成尽力就行了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2049667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL与SQLserver

与MySQL的差别 SQL Server和MySQL都是广泛使用的关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它们的SQL语法有很多相似之处&#xff0c;但也存在一些差异。以下是一些主要的语法区别&#xff1a; 1. 数据库和表的创建 SQL Server CREATE DATABASE databas…

Ma Spaghet!

目录 一、题目 二、思路 三、payload 3.1 方案一 3.2 方案二(官方) 四、思考与总结 一、题目 <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams.get(somebody) || "Somebody…

产品经理-​你做产品经理有什么优势?(39)

你做产品经理有什么优势&#xff1f; 这是一个关于自我认知、个人优势的问题 人贵有自知之明&#xff0c;求职者应该对自己的优缺点有一个客观、深入的认识 大公司往往更加看重你的基本素质&#xff08;逻辑分析、学习能力、潜力等&#xff09; 因为大公司有相对成熟的培养体系…

OpenDDS的Rtps_Udp传输协议可靠性QoS收发基本流程

OpenDDS中,实现了Rtps_Udp传输协议(非纯udp)的可靠性传输。传输的线程包括: 1)发送方线程主要线程和定时器 《1》应用线程 《2》网络异步发送线程 《3》Heartbeat定时器 《4》Nak_response定时器 2)接收方主要线程和定时器 《1》网络异步接收线程 《2》heartbeat_respons…

Java | Leetcode Java题解之第344题反转字符串

题目&#xff1a; 题解&#xff1a; class Solution {public void reverseString(char[] s) {int n s.length;for (int left 0, right n - 1; left < right; left, --right) {char tmp s[left];s[left] s[right];s[right] tmp;}} }

【C++】智能指针详解

一、从new和delete谈起 在C中&#xff0c;可以使用new和delete关键字进行对象的创建和销毁&#xff0c;new一个对象实际上是在堆上分配内存&#xff0c;而new出来的对象也要自己用delete释放&#xff0c;从而回收内存&#xff0c;否则会造成内存的泄露。由程序员自己new来分配…

[手机Linux PostmarketOS]五, docker安装和使用

docker容器 一&#xff0c;docker安装和配置 安装 docker 和 docker-compose&#xff1a; sudo apk add docker docker-cli-compose #安装docker sudo service docker start #启动docker服务 sudo rc-update add docker default #设置docker为自启动可选关…

【PostgreSQL003】PostgreSQL数据表空间膨胀,磁盘爆满,应用宕机(经验总结,已更新)

1.一直以来想写下基于PostgreSQL的系列文章&#xff0c;作为较火的数据ETL工具&#xff0c;也是日常项目开发中常用的一款工具&#xff0c;最近刚好挤时间梳理、总结下这块儿的知识体系。 2.熟悉、梳理、总结下PostgreSQL数据库相关知识体系。空间膨胀&#xff08;主键、外键、…

汇编语言:call、call far ptr、call word ptr、call dword ptr、call 寄存器

引言 call指令是转移指令&#xff0c;CPU执行call指令&#xff0c;进行两步操作&#xff1a; &#xff08;1&#xff09;将当前IP或当前CS和IP压入栈中 &#xff08;2&#xff09;转移。call指令不能短转移&#xff0c;除此之外&#xff0c;call指令转移的方法跟jmp指令的原理…

柔性超级电容器咋储能?生物聚合物在其中起啥作用?有啥挑战?

*本文只作阅读笔记分享* 一、引言 随着对化石燃料影响的日益关注&#xff0c;开发用于先进电化学能量存储设备的绿色和可再生材料变得至关重要。超级电容器因其出色的寿命、安全性和宽温度操作范围等优势而成为有前途的储能候选者。柔性超级电容器特别适合为轻质可穿戴电子设…

xss GAME (xss漏洞攻击1-8)

目录 xss网页链接 第一关 第二关 第三关 ​编辑第四关 ​编辑第五关 ​编辑第六关 第七关 第一种 Function构建函数 第二种 tostring parseInt 第三种 silce() ​编辑第八关&#xff08;安全过滤框架 dom破坏&#xff09; xss网页链接 XSS Game - Learning XSS Ma…

linux之网络子系统-GSO/TSO 源码分析

一、GSO/TSO GSO 目前在内核5.10.* 版本时&#xff0c;已经是合入主线&#xff0c;就是对TCP/UDP都支持并且在网络协议栈GSO功能是默认打开的。虽然可以通过ethtool -K 网卡名 gso off 关闭&#xff0c;但是在L3/L4还是走GSO逻辑&#xff0c;关不掉。我目前是没有找到内核源码…

NextJs - 服务端/客户端组件之架构多样性设计

NextJs - 服务端/客户端组件之架构多样性设计 前言一. 架构设计1.1 SSR流式渲染常见错误设计之 - 根页面同步阻塞1.2 架构设计之 - 客户端组件依赖于服务端组件数据① 使用 Redux 完成数据共享 1.3 架构设计之 - 单页内的分步骤跳转① 如何做到服务端组件和客户端组件之间的切换…

libevent之android与鸿蒙编译过程

背景 最近基于libevent开发了一个端侧的缓存代理库&#xff0c;先是基于macOS编译开发的&#xff0c;基本0问题&#xff0c;后来移植到鸿蒙与android时遇到一些编译链接问题。 libevent版本如下&#xff1a; 软件版本号libevent-2.1.8 android编译 编译环境 android studio…

EmguCV学习笔记

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 笔者的博客网址&#xff1a;https://blog.csdn.net/uruseibest 本教程将分为VB.Net和C#两个版本分别进行发布。 教程VB.net版本请…

Go Roadmap-Basics中文笔记

Go Roadmap-Basics 地址&#xff1a;https://roadmap.sh/golang 简介&#xff1a;Github star No.6 学习路线 Go 中译版 Learn the Basics Go特点&#xff1a;静态类型&#xff0c;运行速度快&#xff0c;编译语言&#xff0c;编译速度快&#xff0c;自动垃圾回收&#xff…

【2】初识JVM

目录 一.什么是JVM 二.JVM的功能 2.1即时编译 三.常见的JVM​编辑 ​编辑 总结​编辑 一.什么是JVM 二.JVM的功能 2.1即时编译 三.常见的JVM 总结

Spring MVC Controller返回json日期格式配置失效的解决办法

如题&#xff0c;Spring MVC 4.3.0版本&#xff0c;配置jackson读写json。Controller层方法返回值对象包含java.util.Date类型的属性&#xff0c;并且在applicationContext.xml中配置了jackson的日期格式&#xff1a; <mvc:annotation-driven><mvc:message-converters…

【ARM+Codesys 客户案例 】RK3568/A40i/STM32+CODESYS在工厂自动化中的应用:PCB板焊接机

现代化生产中&#xff0c;电子元件通常会使用自动化设备来进行生产&#xff0c;例如像PCB&#xff08;印刷电路板&#xff09;的组装。但是生产过程中也会面临一些问题&#xff0c;类似于如何解决在PCB板上牢固、精准地安装各种组件呢&#xff1f;IBL Lttechnik GmbH公司的CM80…

什么是OpenTiny?

OpenTiny 是一套企业级的 Web 前端开发解决方案&#xff0c;提供跨端、跨框架的 UI 组件库和低代码引擎&#xff0c;帮助开发者高效构建 Web 应用 。企业运用开发中&#xff0c;可以利用 OpenTiny 的以下核心组件和优势&#xff1a; TinyVue 组件库&#xff1a;一个丰富的组件库…