算法竞赛
文章平均质量分 92
熙曦Sakura
985大连理工大学计算机专业本科生,分享我的学习心得,欢迎大家批评指正
展开
-
【算法竞赛】栈
栈的特点是"栈在生活中的原型有:坐电梯,先进电梯的被挤在最里面,只能最后出来;一管泡腾片,最先放进管子的药片位于最底层,最后被拿出来。栈只有,从这个口进入,也从这个口弹出,这是它与队列最大的区别。队列有一个入口和一个出口,所以手写栈比手写队列更简单。编程中常用的递归就是用栈来实现的。栈需要用空间存储,如果栈的深度太大,或者存进栈的数组太大,那么总数会超过系统为栈分配的空间,就会爆栈导致栈溢出。这是递归的主要问题,递归深度要注意。编码时通常直接用STL stack,或者自己手写找。原创 2024-09-20 18:48:11 · 495 阅读 · 0 评论 -
【算法竞赛】链表
链表的特点是用一组位于任意位置的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以不连续。链表是容易理解和操作的基本数据结构,它的操作有初始化、添加、遍历、插入、删除、查找、释放等。链表分为单向链表和双向链表,如图所示.链表的各节点首尾相接,最后的next指针指向第一个data,第一个pre指针指向最后的data.单向链表只有一个遍历方向,双向链表有两个遍历方向,比单向链表的访问方便一些,也快一些.在需要频繁访问前后几个节点的场合可以使用双向链表.原创 2024-09-17 15:23:12 · 965 阅读 · 0 评论 -
【算法竞赛】队列
循环队列是一种顺序表,使用一组连续的存储单元依次存放队列元素,用两个指针head和tail分别指示队头元素和队尾元素,当head和tail走到底时,下一步回到开始的位置,从而在这组连续空间内循环.(2)dp[i]包括多个元素,从前面某个a[v]开始,v原创 2024-09-18 20:46:41 · 978 阅读 · 0 评论 -
【算法竞赛】二叉树和哈夫曼树
树是非线性数据结构,它能很好地描述数据的层次关系。树这种结构的现实场景很常见,如文件目录、书本的目录就是典型的树形结构。二叉树是最常用的树形结构,特别适合编码,常常将一般的树转换为二叉树来处理。本节介绍二叉树的定义和存储。哈夫曼(Huffman)树是二叉树的一个应用。原创 2024-09-21 15:27:16 · 1262 阅读 · 0 评论 -
【算法竞赛】堆
堆是一种树形结构,树的根是堆顶,堆顶始终保持为所有元素的最优值。有最大堆和最小堆,最大堆的根节点是最大值,最小堆的根节点是最小值。本节都以最小堆为例进行讲解。堆一般用二叉树实现,称为二叉堆。二叉堆的典型应用有堆排序和优先队列。原创 2024-10-01 12:53:52 · 1105 阅读 · 0 评论 -
【算法竞赛】算法复杂度
计算的资源是有限的,竞赛题会限制代码所使用的计算资源。计算资源有两种:计算时间和存储空间。与此对应的有时间复杂度和空间复杂度,时间复杂度衡量计算的次数,空间复杂度衡量需要的存储空间。编程竞赛的题目在逻辑、数学、算法上有不同的难度:简单的题目,可以一眼看懂;复杂的题目,往往需要很多步骤才能找到解决方案。它们对代码性能考核的要求是代码必须在限定的时间和空间内运行结束。这是因为问题的"有效"解决,不仅在于能否得到正确答案,更重要的是能在合理的时间和空间内给出答案。原创 2024-10-01 13:54:20 · 972 阅读 · 0 评论 -
【算法竞赛】尺取法
尺取法(又称为双指针、Two Pointers)是算法竞赛中一个常)用的优化技巧,用来解决序列的区间问题,操作简单,容易编程。如果区间是单调的,也常常用二分法求解,所以很多问题用尺取法和二分法都行。另外,尺取法的操作过程和分治算法的步骤很相似,有时也用在分治中。原创 2024-10-01 15:54:57 · 1150 阅读 · 0 评论