首页 > 其他分享 >C语言刷leetcode——并查集

C语言刷leetcode——并查集

时间:2023-04-28 17:24:12浏览次数:53  
标签:index parent int 查集 C语言 2.3 cities leetcode

目录

概述

https://leetcode.cn/problems/number-of-provinces/solution/python-duo-tu-xiang-jie-bing-cha-ji-by-m-vjdr/
基本概念
并查集是一种数据结构
并查集这三个字,一个字代表一个意思。
并(Union),代表合并
查(Find),代表查找
集(Set),代表这是一个以字典为基础的数据结构,它的基本功能是合并集合中的元素,查找集合中的元素
并查集的典型应用是有关连通分量的问题
并查集解决单个问题(添加,合并,查找)的时间复杂度都是O(1)O(1)
因此,并查集可以应用到在线算法中

参考链接:

https://zhuanlan.zhihu.com/p/417587917
https://blog.csdn.net/weixin_54186646/article/details/124477838

刷题

入门题: 547. 省份数量(朋友圈)

  1. dfs

  2. bfs

  3. 并查集

int Find(int* parent, int index) {
    if (parent[index] != index) {
        parent[index] = Find(parent, parent[index]);
    }
    return parent[index];
}

void Union(int* parent, int index1, int index2) {
    parent[Find(parent, index1)] = Find(parent, index2);
}

int findCircleNum(int** isConnected, int isConnectedSize, int* isConnectedColSize) {
    int cities = isConnectedSize;
    int parent[cities];
    for (int i = 0; i < cities; i++) {
        parent[i] = i;
    }
    for (int i = 0; i < cities; i++) {
        for (int j = i + 1; j < cities; j++) {
            if (isConnected[i][j] == 1) {
                Union(parent, i, j);
            }
        }
    }
    int provinces = 0;
    for (int i = 0; i < cities; i++) {
        if (parent[i] == i) {
            provinces++;
        }
    }
    return provinces;
}

684. 冗余连接

2.3.1 朋友圈的参考解法(547)

2.3.2 冗余连接(684)

2.3.3 岛屿数量(200_必做)
https://leetcode.cn/problems/number-of-islands/solution/cyu-yan-bing-cha-ji-mo-ban-jian-yi-bei-xia-lai-by-/

2.3.4 句子相似性II (737_会员)

2.3.5 得分最高的路径(1102_会员)

2.3.6 最低成本联通所有城市(1135_会员)

2.3.7 以图辨树(261_会员)

2.3.8 按字典序排列最小的等效字符串(1061_会员)

2.3.9 无向图中连通分量的数目(323_会员)

2.3.10 尽量减少恶意软件的传播(924_困难)

标签:index,parent,int,查集,C语言,2.3,cities,leetcode
From: https://www.cnblogs.com/kongweisi/p/17356577.html

相关文章

  • vscode-leetcode
    vscode里写leetcode需要的插件xavier-cai.vscode-leetcode-cpp-debug,leetcode.vscode-leetcodeLeetCodeC++Debugger.DeleteTemporaryContents置为falsectrl+shift+p运行LeetCodeC++Debugger:StartDebugging在leetcode-main.cpp进行debug注意不要使用mingw的调试......
  • LeetCode 241 为运算表达式设计优先级
    LeetCode|241.为运算表达式设计优先级  给你一个由数字和运算符组成的字符串 expression,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以按任意顺序返回答案。  生成的测试用例满足其对应输出值符合32位整数范围,不同结果的数量不超过104。示......
  • java 语言与 C语言端 AES (ECB)
    注:java为no-padding注释掉了padding部分(byte数组初始化时为0x00)c为padding0x00(byte数组初始化时为0x00)代码出自网上代码地址githubhttps://github.com/mountwater/AES-128-ECB-java_and_cJAVA代码//CopyrightPopaTiberiu2011//f......
  • c语言中,字符数组名 与 指向字符串常量的指针之间的关系
    chara[]="hello";//定义一个字符数组a,constchar*b="hello";//定义一个指向字符的指针b,指向字符串常量的第一个字符的首地址区别:a是一个指针常量,它本身的值不能修改,即char*consta;b是一个常量指针,它所指向的值不能修改,constchar*b;......
  • [每天例题]蓝桥杯 C语言 津津的储蓄计划
    津津的储蓄计划题目 题目要求1.每个月的月初妈妈给津津 300 元钱。2.实际花销和预算的相同。3.津津可以随时把整百的钱存在她那里,到了年末她会加上 20% 还给津津4每个月的月初如果她预计到这个月的月末手中还会有多于 100 元或恰好 100 元,她就会把整百的钱存在妈......
  • C语言结构体位域简单介绍
    目录0前言1结构体简单介绍2结构体的内存对齐3结构体位域历史文章0前言这几天看到一个有趣的结构体,之前没有见过,稍微了解了一下,顺便记录一下以下例子均在32位操作系统操作1结构体简单介绍在C语言中,每种类型的变量都会占用一定的字节数,以下面几种为例char1Bin......
  • 【二分查找】LeetCode 153. 寻找旋转排序数组中的最小值
    题目链接153.寻找旋转排序数组中的最小值思路首先分析一下旋转数组可能有的状态:左<中<右,此时最小值肯定在左边,应当收缩右边界左<中,中>右,此时最小值肯定在右半段,应当收缩左边界左>中,中<右,此时最小值肯定在左半段,应当收缩右边界分析这三种状态可以发现,中值小......
  • 菜鸟记录:c语言实现PAT甲级1005--Spell It Right
     非常简单的一题了,但还是交了两三次,原因:对数组的理解不足;对数字和字符之间的转换不够敏感。这将在下文中细说。Givenanon-negativeinteger N,yourtaskistocomputethesumofallthedigitsof N,andoutputeverydigitofthesuminEnglish.InputSpecificatio......
  • 【LeetCode动态规划#14】子序列系列题(最长递增子序列、最长连续递增序列、最长重复子
    最长递增子序列力扣题目链接(opensnewwindow)给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组[0,3,1,6,2,2,7]的子序列。示例1:输入:nums=[10,9,2,5,3,7......
  • C语言--练习
    1、写一个函数输出a的二进制(补码)中1的个数。intcount_(inta){ intcount=0; for(inti=0;i<32;i++) { if(((a>>i)&1)==1) count++; } returncount;}intmain(){ intcount=0; inta=0; scanf("%d",&a); count=count_(a);......