数据结构与算法
文章平均质量分 95
全栈ing小甘
成为一个全干工程师
展开
-
考研数据结构——顺序表代码题
当计数器为零时,选择当前元素作为新的候选主元素,并将计数器重置为1。第一篇扫描中可能会出现误判,可能导致误判的情况主要发生在第一遍扫描中选择候选主元素的逻辑上。:因为数组是升序的,我们可以通过移动指向最小值的指针,使其增大,从而可能减小与其他两个值的差距。如果数组中根本就没有主元素,但由于计数器的逻辑,可能在最后返回一个看似有效的候选者。最小的那个,我们可以利用数组已按升序排列的特性,设计一个高效的算法。:遍历数组,统计候选主元素出现的次数,检查其是否满足主元素的条件原创 2024-10-01 17:00:01 · 1056 阅读 · 0 评论 -
考研数据结构考点——第二章线性表
选择顺序表:当需要频繁的随机访问,且插入删除操作较少。当数据量相对固定或变化不大,且内存连续性有利于性能优化。如实现数组、栈、队列、查找表等数据结构。选择链表:当需要频繁的插入和删除操作,且对随机访问要求不高。当数据量动态变化,且不希望频繁重新分配内存。如实现动态列表、图的邻接表、任务调度等应用。原创 2024-09-23 10:29:40 · 1102 阅读 · 0 评论 -
考研数据结构考点——第一章绪论
数据:能被输入到计算机并被程序识别和处理的符号集合,包括数值、字符及其他能表示信息的符号。数据元素:数据元素是数据的基本单位,通常作为一个整体考虑,如一个人的信息记录。数据项:数据项是构成数据元素的最小不可分割单位,反映了数据的基本属性。数据对象:具有相同性质的数据元素的集合,是数据的子集。原创 2024-09-14 09:12:14 · 717 阅读 · 0 评论 -
每日力扣刷题day07(滑动窗口专项)
今天的题都是求区间内平均数,思路都一样原创 2024-05-29 10:25:24 · 1033 阅读 · 1 评论 -
每日力扣刷题day06(滑动窗口专项)
滑动窗口算法是一种常用的算法技巧,适用于处理数组或字符串中的连续子序列问题。它通过动态调整窗口的大小和位置,能够在线性时间内解决许多复杂的子数组或子字符串问题。滑动窗口的核心思想是利用两个指针来表示窗口的左右边界,通过移动这两个指针来维护和调整窗口,使得窗口内的数据满足特定的条件。原创 2024-05-28 09:34:45 · 1071 阅读 · 0 评论 -
每日力扣刷题day05(小白简单题)
字符串合并问题:类型:字符串操作难度:简单描述:交替合并两个字符串,若一个字符串较长,追加剩余部分。字符串旋转问题:类型:字符串操作难度:中等描述:判断一个字符串是否可以通过若干次旋转操作变成另一个字符串。生成和为零的数组:类型:数组操作难度:简单描述:生成一个包含 n 个不同整数且总和为零的数组。这些题目主要涉及字符串和数组的基本操作原创 2024-05-26 11:02:53 · 713 阅读 · 0 评论 -
每日力扣刷题day04
今天的题目给出了更多题解,提到了流操作、数字编码、ascii映射、位运算等技巧,题目虽然简单,但优化起来也很考验。原创 2024-05-26 00:43:06 · 960 阅读 · 0 评论 -
每日力扣刷题day03(从零开始版)
从零开始刷力扣,从最简单的题开始,每个题都有一定的出现频率。题解简单易懂,,多种解题方法技巧原创 2024-05-25 11:24:34 · 1077 阅读 · 0 评论 -
每日力扣刷题day02(从零开始版)
从零开始刷力扣,从最简单的题开始,每个题都有一定的出现频率。题解简单易懂,每日5题原创 2024-05-24 00:24:15 · 1136 阅读 · 0 评论 -
每日力扣刷题day01(从零开始版)
从零开始刷力扣,从最简单的题开始,每个题都有一定的出现频率。题解简单易懂,每日5题。原创 2024-05-23 04:43:38 · 987 阅读 · 0 评论 -
蓝桥杯第十五届抱佛脚(十)贪心算法
贪心算法是一种在算法设计中常用的方法,它在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是最好或最优的算法。贪心算法与枚举法的不同之处在于每个子问题都选择最优的情况,然后向下继续进行,且不能回溯。枚举法是将所有情况都考虑然后选出最优的情况。贪心算法在解决问题时,不从整体考虑,而是采用一种一眼看到局部最优解的选择方式。并且,贪心算法没有固定的模板可以遵循,每个题目都有不同的贪心策略,所以算法设计的关键在于贪心策略的选择。原创 2024-04-07 15:37:56 · 5875 阅读 · 3 评论 -
蓝桥杯第十五届抱佛脚(七)前缀和与差分
前缀和算法主要用于处理区间和的查询问题。构建前缀和数组:对于给定的数组arr,构建一个新的数组prefixSum,其中存储了从arr[0]到arr[i]的元素之和。区间和查询:如果需要频繁查询数组的任意子数组(区间)的和,前缀和算法是一个非常有效的方法。适用于静态数据:当原数组在多次查询之间不改变时尤其有效。快速查询:查询任意区间和的时间复杂度降低到 O(1)。更新困难:如果原数组频繁变化,需要重新计算前缀和,这可能很耗时。原创 2024-03-31 10:30:17 · 1308 阅读 · 0 评论 -
蓝桥杯第十五届抱佛脚(二)竞赛中的数据结构
在算法竞赛中,有一些常用的数据结构非常重要,熟练掌握它们有助于解决很多算法问题。以下是一些常见的数据结构:数组(Array)和链表(Linked List)基本的线性数据结构,支持随机访问(数组)和动态内存分配(链表)栈(Stack)和队列(Queue)基于先进后出(LIFO)和先进先出(FIFO)原理的线性数据结构集合(Set)无重复元素的集合,HashSet和TreeSet是常用实现掌握这些数据结构的实现原理、时间/空间复杂度、使用场景对于算法竞赛至关重要。原创 2024-03-24 13:47:47 · 1918 阅读 · 1 评论 -
蓝桥杯第十五届抱佛脚(三)枚举法与尺取法
很多人将蓝桥杯戏称为“暴力杯”,因为蓝桥杯采用了OI的赛制。在这种赛制下,即使对于某些大题答案不清楚的情况下,也可以通过暴力方法获得部分分数。一提到暴力,人们往往首先想到的是枚举。然而,实际上,枚举是一门需要技巧的技术,确保能够穷尽所有可能情况并不容易。因此,在本文中,我将详细介绍,以确保能够完整地列举出所有情况,不漏掉任何一种可能性。原创 2024-03-25 15:58:11 · 1042 阅读 · 0 评论 -
蓝桥杯第十五届抱佛脚(五)DFS、BFS及IDS
DFS(Depth-First Search)即深度优先搜索,是一种用于遍历或搜索树或图的算法。它从根节点开始,尽可能沿着每一条路径直到这条路径最后一个节点被访问了,然后回退,继续访问下一条路径。它的基本思想是尽可能深地搜索树的分支,直到达到叶子节点,然后回溯到上一个分支节点继续搜索。DFS通常使用递归或栈来实现。原创 2024-03-29 23:32:56 · 1300 阅读 · 0 评论 -
蓝桥杯第十五届抱佛脚(八)并查集
并查集是一种数据结构,用于管理一系列不交集的元素集合,并支持两种操作:查找(Find):查找操作用于确定某个元素属于哪个集合,这通常通过追溯元素的父节点直到找到代表元素来完成。合并(Union):合并操作用于将两个不相交的集合合并为一个。合并可以通过将一个集合的代表元素的父节点指针指向另一个集合的代表元素来完成。具体实现时,并查集通过一个数组来维护每个元素的父指针,每个集合由一个根元素代表,该根元素的父指针指向自己,表明它是集合的代表。原创 2024-03-31 15:03:41 · 1139 阅读 · 0 评论 -
蓝桥杯第十五届抱佛脚(一)手算和思维题
知识点梳理思维题(杂题):不需要算法和数据结构,只需要逻辑、推理的题目,难度可难可易。考察思维能力和编码能力,只能通过大量做题来提高。BFS 搜索和 DFS 搜索:也就是暴力搜索。这是非常基本的算法,是基础中的基础。动态规划:线性 DP,以及一些 DP 应用,例如状态压缩 DP、树形 DP 等。简单数学和简单数论。简单的字符串处理、输入输出,简单图论。基本算法:例如排序、排列、二分、倍增、差分、贪心。基本数据结构:队列、栈、链表、二叉树等。原创 2024-03-22 15:09:24 · 1573 阅读 · 3 评论 -
蓝桥杯第十五届抱佛脚(四)递归与分治
递归和分治是两种常见的问题解决方法,它们是不同的概念,但它们经常在一起使用,有时甚至是互相支持的。递归是一种解决问题的方法,其中一个函数通过不断调用自身来解决更小规模的子问题,直到达到基本情况为止。递归通常用于解决具有自相似性质的问题,例如树结构、图结构等。经典的递归算法包括斐波那契数列的计算、二叉树的遍历等。分治是一种算法设计策略,它将问题分解成若干个规模较小且相互独立的子问题,然后解决这些子问题,最后将子问题的解合并起来得到原问题的解。分治算法通常用于解决可以被分割成互相独立的子问题的问题。原创 2024-03-27 17:26:16 · 848 阅读 · 0 评论 -
蓝桥杯第十五届抱佛脚(九)动态规划
动态规划(Dynamic Programming, DP)是一种用于解决复杂问题的优化算法设计技术。它将原问题分解为若干相互重叠的子问题,通过记录子问题的解,避免重复计算,从而大大减少了计算量。动态规划典型的应用场景包括:最优化问题:如求最短路径、最小编辑距离等。计数问题:如有多少种方式走到终点、排列组合数量等。取值问题:如背包问题、切钢条问题等。原创 2024-04-01 11:44:47 · 1516 阅读 · 2 评论 -
蓝桥杯第十五届抱佛脚(六)回溯与剪枝
回溯算法是一种解决问题的算法,它尝试解决问题的一个分支,如果发现当前分支不能得到有效的完整解决方案,就会消除(回溯)所做的一系列选择,并尝试另一个可能的分支。回溯算法通常用于解决组合问题,如排列、组合、选择和分割问题,它通过逐步构建解的候选项并在每个步骤中继续或放弃继续探索的决策,实现问题的穷举搜索。原创 2024-03-30 13:33:17 · 1193 阅读 · 0 评论