
算法与数据结构
文章平均质量分 65
算法与数据结构
2301_79308687
这个作者很懒,什么都没留下…
展开
-
算法-广度优先搜索
广度优先搜索BFS先用先进先出的队列存储新节点,等当前层的新节点都搜索完毕之后再搜索下一层节点。广度优先搜索常用来处理最短路径问题。原创 2025-02-26 06:01:56 · 230 阅读 · 0 评论 -
回溯法-排列,组合
回溯法是一类特殊优先搜索,它记录节点状态,并在搜索完成后回溯状态。原创 2025-02-04 18:07:42 · 235 阅读 · 0 评论 -
深度优先搜索 DFS
如图所示,深度优先搜索DFS对新节点立即执行搜索,因此新节点都向下一层。而广度优先搜索BFS先用队列存储新节点,等当前层的新节点都搜索完毕之后再搜索下一层节点。原创 2025-02-04 17:01:37 · 434 阅读 · 0 评论 -
算法排序算法
对于这种“第K个元素”的问题,可以用快速选择,它是对快速排序的一种简化。快速排序采用分治思想,将数组分为两个子数组,每次划分数组都随机选择一个元素,小于该元素的在一个数组,大于该元素的在另一个数组。递归执行划分数组操作,直到数组全部完成排序。而快速选择针对某个元素,它不要求对两个子数组排序,仅仅递归划分“第K个元素”在的那个子数组即可,直到获得“第K个元素”的位置。为了避免两个子数组,一个长度为1,一个长度为n-1的极端情况,每次划分数组时随机选择元素。通过递归实现快速排序。原创 2024-12-29 07:11:22 · 561 阅读 · 0 评论 -
算法 双指针技巧
那么左指针遍历到i时,如果右指针大于j,那么和偏大,右指针左移,不会出现左指针右移的情况。右指针遍历到j也是同理,因此不会出现左指针大于i,右指针小于j的情况。a表示头节点到入环点的距离,b表示入环点到相遇点的距离,c表示相遇点到入环点的距离。由于数组是有序的,因此两个指针,一个从前向后遍历,一个从后往前遍历,可以在O(n)时间复杂度完成查询。,这个等式意味着,分别从相遇点出发和从头结点出发的两个节点终会在入环点相遇。在环里相遇,它们速度又相同,因此它们在环里的每个位置都相遇,自然包括入环点。原创 2024-12-22 12:00:01 · 612 阅读 · 0 评论 -
贪心算法 greedy
先从左到右遍历孩子,如果当前孩子比左边孩子评分更高,则糖果数=左孩糖果数加1.完成遍历后,满足左邻条件。再从右往左遍历孩子,如果当前孩子比右边孩子评分更高,则糖果数=右孩糖果数加1。为了更多孩子能拿到饼干,对每个孩子的要求是“尽量给没拿到饼干的孩子留更多饼干”,换句话说就是“自己尽量拿更小的饼干”。题目要求:相邻两个孩子评分更高的孩子会获得更多的糖果。为了更少分配糖果,如果孩子评分更高,只比相邻1个糖果。因此按照区间的结束序号从小到大排序,每次都留下结束时间最早的,然后往后遍历,删去重叠的。原创 2024-12-21 11:37:13 · 613 阅读 · 0 评论 -
[146 LRU缓存](https://leetcode.cn/problems/lru-cache/)
维护一个双向链表保存缓存中的元素。如果元素超过容量阈值,则删除最久未使用的元素。为了实现这个功能,将方法获取的元素添加到链表首部。为了在O(1)时间复杂度执行get()方法,再新建一个映射表,缓存key与链表节点。原创 2024-12-14 10:37:54 · 563 阅读 · 0 评论 -
算法 并查集
因此将2节点和3节点的元素指向3节点。注意:1号节点指向2号节点,不是3节点。但是2号节点指向3号节点。初始化并查集数组,下标1-5代表节点编号,元素代表节点所属的集合。节点形成环,任意一条边都可以是多余边,删除任意一条边都能还原成树。例题:edges = [[1,2], [2,3], [3,4], [1,4], [1,5]]将1号节点和2号节点视为一个集合,因此它们的元素指向同一个节点。一种路径压缩的思路是每次计算节点所属集合时路径上每个节点的集合。边,由于1号节点和2号节点不属于一个集合,因此。原创 2024-12-07 11:21:12 · 1415 阅读 · 0 评论 -
算法题-删除数组中重复元素,只保留2个
给定一个数组,原地删除重复元素,使每个元素最多出现2次,并且返回删除后数组的长度。不用管数组中剩余的元素。例题:数组为,删除后数组为,长度为6.Leetcode有道类似的题,它的特点是每个元素只保留1个。而本题的特点是每个元素保留2个。原创 2024-11-17 12:13:03 · 383 阅读 · 0 评论 -
算法-字符串匹配KMP
而KMP算法不会,主串下标永远不会回退。再看子串下标,暴力算法会将子串下标重置为0,而KMP算法会利用成功匹配部分尽量保留匹配子串。接下来就来看看它是怎么做到的。从图中可以看出暴力算法与KMP算法中主串下标和子串下标移动规则的区别。首先看主串下标,暴力算法会将主串下标从。原创 2024-11-10 17:49:11 · 1002 阅读 · 0 评论 -
算法-分治算法
分治算法由分和治组成。以归并排序为例,分就是将原数组递归分解为2个子数组,直到子数组的长度为1,不可再分。治就是将排好序的2个子数组合成1个排好序的新数组,合二为一。原创 2024-11-10 10:01:57 · 250 阅读 · 0 评论 -
算法-二分法
在一个有序数据集合中找目标元素,每次跟区间中间位置的元素进行对比,进而每次舍弃一半元素,在剩下一半区间中继续查找。直到找到目标元素或者区间长度为0.原创 2024-11-10 09:52:40 · 442 阅读 · 0 评论