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

引言

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

复习

并查集模板

  • 这里学习了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");
        }
    }
}

在这里插入图片描述

联通图寻路问题

蚂蚁笔试第三题

总结

  • 这个并查集算是做完了,但是仅仅是掌握了最基础的,怎么按秩优化还没有弄,这里先跳过吧!
  • 我得专注于自身,尽力去准备,能成就成,不能成尽力就行了!
智能网联汽车的安全员高级考试涉及多个方面的专业知识,包括但不限于自动驾驶技术原理、车辆传感器融合、网络安全防护以及法律法规等内容。以下是针对该主题的些核心知识点解析: ### 关于智能网联车安全员高级考试的核心内容 #### 1. 自动驾驶分级标准 国际自动机工程师学会(SAE International)定义了六个级别的自动驾驶等级,从L0到L5[^1]。其中,L3及以上级别需要安全员具备更高的应急处理能力。 #### 2. 车辆感知系统的组成与功能 智能网联车通常配备多种传感器,如激光雷达、毫米波雷达、摄像头和超声波传感器等。这些设备协同工作以实现环境感知、障碍物检测等功能[^2]。 #### 3. 数据通信与网络安全 智能网联车依赖V2X(Vehicle-to-Everything)技术进行数据交换,在此过程中需防范潜在的网络攻击风险,例如中间人攻击或恶意软件入侵[^3]。 #### 4. 法律法规要求 不同国家和地区对于无人驾驶测试及运营有着严格的规定,考生应熟悉当地交通法典中有关自动化驾驶部分的具体条款[^4]。 ```python # 示例代码:模拟简单决策逻辑 def decide_action(sensor_data): if sensor_data['obstacle'] and not sensor_data['emergency']: return 'slow_down' elif sensor_data['pedestrian_crossing']: return 'stop_and_yield' else: return 'continue_driving' example_input = {'obstacle': True, 'emergency': False, 'pedestrian_crossing': False} action = decide_action(example_input) print(f"Action to take: {action}") ``` 需要注意的是,“橙点同学”作为特定平台上的学习资源名称,并不提供官方认证的标准答案集;建议通过正规渠道获取教材并参加培训课程来准备此类资格认证考试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值