
数据结构与算法
文章平均质量分 91
算法博文
robes knight
这个作者很懒,什么都没留下…
展开
-
数组模拟实现常用数据结构
【代码】数组模拟实现常用数据结构。原创 2024-04-11 15:58:04 · 161 阅读 · 0 评论 -
动态规划-总体概述
所谓。原创 2024-04-10 19:01:01 · 1097 阅读 · 0 评论 -
图论-二分图
此题也是一个二分图问题,n个人分为两组就是将n个点染色为两种,然后dislikes数组表示不能同色的人,其实在二分图中就是相连接的节点就是数组中的组合,因为相邻节点和dislike中组合都不能同色。你使用什么数据结构来存储这种关系呢?既然说到遍历图,也不涉及最短路径之类的,当然是 DFS 算法和 BFS 皆可了,DFS 算法相对更常用些,所以我们先来看看如何用 DFS 算法判定双色图。二分图的顶点集可分割为两个互不相交的子集,图中每条边依附的两个顶点都分属于这两个子集,且两个子集内的顶点不相邻。原创 2024-03-29 14:14:48 · 2032 阅读 · 0 评论 -
图论- 最小生成树
在题中只给出一个点的坐标,我们需要想方法转换为两个点的链接,所以需要将每个点(两个坐标组合)转换为一个符号标记,在链接数组把相连的两个符号放一起就行了,很明显,我们使用0-n-1来记录每一个点是最合适的,不仅方便遍历也一目了然。的高度只存在于平衡二叉树,对于一般的树可能出现极端不平衡的情况,使得「树」几乎退化成「链表」,树的高度最坏情况下可能变成。因为无论树长啥样,树上的每个节点的根节点都是相同的,所以能不能进一步压缩每棵树的高度,使树高始终保持为常数?我们可能习惯性地认为树的高度就是。原创 2024-03-29 10:26:03 · 3396 阅读 · 0 评论 -
图论-最短路
dijkstra算法适用于这样一类问题:从起点 到所有其他节点的最短路径。其实求解最短路径最暴力的方法就是使用bfs广搜一下,但是要一次求得所有点的最短距离我们不可能循环n次,这样复杂度太高,因此dijlstra算法应运而生,算法流程如下:(待补充)对于:稠密图一般使用邻接矩阵+朴素dji稀疏图使用邻接表+堆优化dji算法模板:1.2 优先级队列优化的djikstra首先我们分析,如果是稀疏图,什么导致的朴素版djikstra复杂度高,首先我们用的是邻接表来存图,那么就要用bfs相应的方法进行遍原创 2024-03-28 20:07:07 · 760 阅读 · 0 评论 -
数据结构-哈希表-总结
1:.size()是容器或者字符串使用的2:数组初始化方式// 所有元素初始化为 0必须指定大小3:时间复杂度为3次O(n)->O(n)4:本题使用数组构建哈希表是因为数据大小已知了,若未知要用其他的数据结构时间复杂度: O(mn)空间复杂度: O(n)使用数组和set的优劣:直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。不要小瞧 这个耗时,在数据量大的情况,差距是很明显的。时间复杂度: O(logn)原创 2023-06-25 11:54:47 · 1286 阅读 · 1 评论 -
数据结构-数组-总结
我们让慢指针slow走在后面,快指针fast走在前面探路,找到一个不重复的元素就赋值给slow并让slow前进一步。这样,就保证了都是无重复的元素,当fast指针遍历完整个数组nums后,就是整个数组去重之后的结果。当需要删除的元素出现后,慢指针停一步,这样每次nums[slowIndex++] = nums[fastIndex];就会覆盖前面的数达到删除的目的。原创 2023-08-31 21:37:55 · 125 阅读 · 0 评论 -
数据结构-哈希表-总结(简)
用数组当成哈希表,数据当作下标,把nums[i]用于计数,先计第一个string,用++,再计第二个string,用- -;1:一般为减少时间开支,在最后一个for循环里面,一边遍历,判断存放数据,一边就判断时候输出,能少用一个循环2:待定(二刷说不定有新体会)原创 2023-06-25 19:45:14 · 299 阅读 · 0 评论 -
数据结构-基础算法
算法学习原创 2023-05-08 23:31:04 · 235 阅读 · 0 评论 -
数据结构与算法-暴力搜索之BFS
3:我们如何排除死亡数字,其实这里的死亡数字就是1.3中的障碍坐标,只是由于每一数字都是一个字符串,我们不能直接定位,需要用一个数据结构来查询是否遇到了障碍,存放障碍其实用什么都行,但是查询时使用比如数组会非常麻烦,那么我们考虑使用set(因为不需要返回查询结果的下标,不使用map)4:如何判断最短选择次数,因为每条路径都是相对权重(长度),所以bfs第一次访问到的target时就是最短路径,问题时在何时进行计数,一开始我错误的将sum++放在了取cur的时候。为什么这样能够能够提升效率呢?原创 2023-10-16 21:46:16 · 327 阅读 · 1 评论 -
数据结构-链表-总结
单链表有两种构造方式,一种是使用虚拟头节点,一种是不是虚拟头节点;使用虚拟头节点可以使得对头节点操作和后面一致,因此后面都使用虚拟头节点创建;原创 2023-09-03 10:24:45 · 166 阅读 · 0 评论 -
动态规划-子序列问题(线性dp)
所谓。原创 2023-11-27 22:38:32 · 1288 阅读 · 1 评论 -
动态规划-背包问题
有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。每一件物品其实只有两个状态,取或者不取,所以可以使用回溯法搜索出所有的情况,那么时间复杂度就是o(2^n),这里的n表示物品数量。所以暴力的解法是指数级别的时间复杂度。进而才需要动态规划的解法来进行优化!思路:本体如何化为背包问题是解题的关键和难点,这里我试想过用一个背包装2个元素这样的思路来想,想了半天都想不通,原创 2024-01-08 13:53:03 · 1321 阅读 · 0 评论 -
数据结构-二叉树-总结
如果可以,写出这个递归函数的定义,并充分利用这个函数的返回值,这叫「分解问题」的思维模式。这个思路是类似通解的思路,有些题存在一些比较巧妙的做法不归入其中,但绝大多数题目都能用这种思想解决。原创 2023-09-30 21:08:44 · 617 阅读 · 1 评论 -
数据结构-栈和队列-总结
首先大家要知道 栈和队列是STL(C++标准库)里面的两个数据结构。C++标准库是有多个版本的,要知道我们使用的STL是哪个版本,才能知道对应的栈和队列的实现原理。接下来介绍的栈和队列也是SGI STL里面的数据结构, 知道了使用版本,才知道对应的底层实现。来说一说栈,栈先进后出,如图所示:栈提供push 和 pop 等等接口,所有元素必须符合先进后出规则,原创 2023-09-04 22:35:41 · 101 阅读 · 1 评论 -
图论-概述
首先也是很重要的一点,我们需要知道图就是多叉树的延申图的抽象结构为如下:(与多叉树很像)但是一般不使用这种结构存储图,而是使用邻接表和邻接矩阵来实现: 代码实现:1.2 图遍历框架-DFS框架我们能体会出来,dfs和回溯其实是非常相似的,下面给出回溯与dfs的对比代码:回溯:dfs:可以看出dfs和回溯其实代码一模一样,只是处理问题不同,选择列表不一样而已我将上述dfs框架当作一般框架,另外还发现了一种dfs的框架,代码如下:可以看出这段代码和一般框架的区别在于我们对节点原创 2023-10-20 21:41:15 · 426 阅读 · 1 评论 -
动态规划-经典dp(打家劫舍,股票等)
dp[i]为爬到第i阶楼梯的方法数;原创 2024-01-11 22:16:39 · 1087 阅读 · 0 评论 -
数据结构与算法-构造数据结构
在双指针章节遇到过单调队列,但是理解较浅,这里进行重新解读和分析:单调队列就是一个「队列」,只是使用了一点巧妙的方法,使得队列中的元素全都是单调递增(或递减)的,这一点和单调栈很像。给你一个数组window,已知其最值为A,如果给window中添加一个数B,那么比较一下A和B就可以立即算出新的最值;但如果要从window数组中减少一个数,就不能直接得到最值了,因为如果减少的这个数恰好是A,就需要遍历window中的所有元素重新寻找新的最值。原创 2023-10-26 21:12:43 · 121 阅读 · 0 评论 -
数据结构与算法-暴力搜索之DFS(回溯)
1:树枝去重2:树层去重3:重复取导致去重4:重复元素导致去重5:不重复选择导致去重。原创 2023-10-10 15:04:47 · 688 阅读 · 1 评论