- 博客(17)
- 收藏
- 关注
原创 并查集——畅通工程
可采用树结构,每一棵树就代表一个集合。根据元素找到该元素所在树的根节点,若根节点相同,则说明位于同一集合。(路经压缩,把元素直接插入到根节点下面)把其中一个高度较小的树作为子树插入另一棵树中,则实现了合并。并查集在图中最重要的应用就是判断图的连通性,比如判断有几个连通子图。支持Find()根据元素找到所在集合。支持union()把两个集合合并。
2025-03-20 11:00:11
270
原创 C++队列——操作受限的线性表
队列支持的函数:1、入队push,入队到队尾 2、出队pop,从队头出队 3、front/back 队首队尾元素 4、empty 判空。涉及到“公平排队”的题目,一般考虑队列。重要应用场景:搜索算法——广度优先遍历。
2025-03-04 15:18:33
243
原创 String应用——单词个数统计
⚠️:当输入的字符串有空格时,如This is a book.,不能再用上述方法,因为%s一次只能读一个单词,不能读入空格。此时有两种方法:1、用C风格的fgets(),读入C风格的字符串fgets(arr,1000,stdin);第三行输出出现最多的字母,不止一个时,按字母顺序逐个输出,空格隔开。⚠️:统计单词个数,需要注意两点:1、当前字符的前一个字符是空格 2、当前字符是字母。输出:第一行输出句子中英文字母的个数。第四行输出出现最多的字母的出现次数。第二行输出句子中单词的个数。
2025-03-03 10:43:33
282
原创 用map替换二分查找及应用——找位置
map的底层是红黑树,所以查找的时间复杂度是O(logn),用map和二分查找的时间复杂度是一样的,但使用map会消耗额外的空间。unordered_map底层是哈希表,查找时间复杂度为O(1),但会消耗更多的额外空间。把所有查找的数据放入map中,转换成通过map中的键获取值的问题。
2025-03-01 14:36:44
194
原创 如何在C++中用sort函数给map里的值排序?
最简单的方法就是直接使用map的迭代器范围初始化vector,但需要确保vector的元素类型可以接受pair<const key,value>。就是把map中的值都复制到vector中去,然后使用sort函数对vector进行排序,可自定义比较函数来比较值。然后就可以得到一个按值排序后的vector,但map本身的结构不会被改变,因为map本身是不可以按值排序的。map的格式一般是这样的,里面有多个pair,pair<?那么如何用sort给map中的值排序呢?具体例子如下:给成绩排序。
2025-02-27 15:18:18
683
原创 map的使用
在map中,下标叫做“键”/key,元素叫做“值”/value,键值对叫做pair。map本质上是一个集合,内容是一个个的键值对,map支持通过key找到对应的value。map可理解为词典,可以通过一个下标去访问元素,下标可以为任意类型,元素也可以为任意类型。
2025-02-25 15:43:06
234
原创 如何求一个数组中各元素的和?
在一个数组中,如a[5]=[1,2,3,4,5],如何求这五个元素与其他几个元素的和(所有和的可能性)?这一共有2的5次方,共32种情况(如1+2,1+3+5,3+4+5等等),此时可用循环进行操作,将算得的和根据需要可放入数组或者集合中。
2025-02-24 11:29:51
158
原创 非线性数据结构——set
无序可重复:unordered_multiset。其中有序集合省内存,无序集合省时间,一般先用有序,若代码超时,则换用无序。有序和无序在使用上无区别,只是在性能上有区别。无序不重复:unordered_set。有序可重复:multiset。元素有序不重复:set。
2025-02-24 08:59:50
254
原创 日期的有关代码——计算第几天、打印日期等
法一:当计算某一天是本年的第几天时,可以运用上面的模版,从一月一号开始算,循环调用NextDay()函数,并count计数,每调用一次count++,当month和day都等于当前日期时,count值为第几天。=0||year%400==0) {//判断是否是闰年,若是,则进入if语句.注意:逻辑与&的优先级高于逻辑或||//打印时月份和几号需要占两位,可以用printf("%02d"),%02d表示输出的整数占两位,不足两位的前面补0.//日期问题模版(计算当前日期的下一天)
2025-02-09 22:48:04
790
原创 整数倒置——反序数
其中,revx是一个中间变量,将每次循环时x的个位加入revx,并将其扩大十倍,下一次循环中再加入x的个位,并✖️10。这是一道清华大学的复试机试题,其中较难的就是整数的倒置,如1089倒置后是9801。这种方法较为笨拙,是将整数的每一位都单独分离出来,再将个位*1000+十位*100+百位*10+千位。方法三与方法二差不多,不多介绍。
2025-02-06 18:07:07
440
原创 运行中的问题——CLion单步调试
提高单步调试效率(代码行较多)——增量编写法:每写(100)行代码后进行调试,即写一点测一点。3、步入,单步调试,有一个折箭头,每点击一下代码都会走到下一步,直到发现监视的表达式出现问题,即可定位。2、监视,打好断电后,点击“小虫子”Debug,进入监视窗口(一般在页面下方)1、打断点,在代码行号和文本编辑器之间用鼠标点击,会出现原点。
2025-02-04 15:29:37
359
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅