![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 62
数据结构与算法的自己理解与解题记录
ACuliflower
科研小白一枚,请多多指教~
展开
-
刷题心得2——滑动窗口最大值(单调队列经典题)
单调队列是判断当前的输入的值跟之前的队尾比,如果队尾的元素比当前值小,那它完全没用了(对于后面来说,肯定是当前值又在右边,又大,肯定当前值有用),队尾元素删除。每次找结果的时候就判断当前的顶端的元素的位置是不是在当前区间内(如果不在就while删除)。这里我使用的数组que来表示的单调队列(队列和栈使用数组来模拟的话会非常非常方便)的滑动窗口从数组的最左侧移动到数组的最右侧。然后再判断一下队首元素是否在当前区间中(存储的是位置的作用就在这)因为map是有序的,所以可以很快的找到最大和最小值。原创 2024-07-08 15:27:23 · 339 阅读 · 0 评论 -
二分模板(二分题都能直接用)
很有用的二分模板二分可以解决的问题:找到满足条件的极限值。必须是极限值的一端一定不符合条件(不可以选择),另一端符合 条件**找满足条件最小值:*找最小的满足的值(大的都满足)*,所以找的是正确的r,所以输出的是r。**找满足条件的最大值:**找的是满足条件的最大值(小的都满足条件),所以找的是正确的l,所以输出与l有关。原创 2024-09-10 12:24:21 · 217 阅读 · 0 评论 -
DP(动态规划)学习笔记
DP(动态规划)学习笔记背包问题① 01背包 每件物品最多使用一次② 完全背包 每件物品有无限个③ 多重背包 每种物品最多有si个 (存在朴素版和优化版)④ 分组背包 没组最多只能选 1 个DP优化:对dp方程进行等价变形DP最重要的就是公式推导(对于当前状态的计算)要满足两个条件:①不重 ②不漏1.01背包问题题目链接:https://www.acwing.com/problem/content/2/最简单的01背包dp[i][j]=max(dp[i−1][j],dp[i−1][原创 2020-11-06 21:00:02 · 123 阅读 · 0 评论 -
刷题心得1——和为k的子数组
2.前缀和+hash map:找的是区间的和为k,对于前缀和pre[i]来讲就是计算pre[ed]-pre[st-1] ==k,对于每个ed的位置,找满足pre[ed]-pre[st-1] ==k的数量,也就是找pre[str-1]==pre[ed]-k的数量。思路:一开始是用尺取来写的,但发现尺取虽然是O(n)时间复杂度,但尺寸是用于最短的连续子区间,对这个条件要求比较苛刻。)):第一层循环确定终点,第二层循环从后往前遍历起点,计算每个区间的总和,但会超时。子数组是数组中元素的连续非空序列。原创 2024-07-05 16:44:26 · 285 阅读 · 0 评论 -
刷题心得3——单调栈
思想:如果栈顶位置的值,比你当前的值还大的话,那肯定对于之后来说就没用了,前边保留的都是比当前位置的值小的数,并且是单增的序列。共一行,包含 𝑁 个整数,其中第 𝑖 个数表示第 𝑖 个数的左边第一个比它小的数,如果不存在则输出 −1。给定一个长度为 𝑁 的整数数列,输出每个数左边第一个比它小的数,如果不存在则输出 −1。第二行包含 𝑁 个整数,表示整数数列。左边离一个数最近 且比它大(小)的数。右边离一个数最近 且比它大(小)的数。第一行包含整数 𝑁,表示数列长度。1≤数列中元素≤10^9。原创 2024-07-08 15:59:20 · 224 阅读 · 0 评论 -
刷题心得4——尺取
给定一个长度为 N 的正整数序列(10 < N < 100 000),序列中的每个数字都小于等于 10000,以及一个正整数 S(S < 100 000 000)。编写一个程序,找到序列中长度最小的连续子序列,其元素和大于或等于 S。第一行是测试用例的数量。对于每个测试用例,程序需要从第一行读取数字 N 和 S,数字之间用空格分隔。第二行是该测试用例的序列数字,数字之间用空格分隔。对于每个测试用例,程序需要在输出文件的单独一行打印结果。如果没有符合条件的子序列,输出 0。思路:找满足条件的最小区间,尺取。原创 2024-07-12 12:15:14 · 237 阅读 · 0 评论 -
刷题心得5-邻接表、拓扑排序
拓扑排序就比较简单了:只需要找入度为零的点输入到队列中,然后遍历它为左节点的所有边,删除(右节点的入度–),最后如果所有节点的入度都为0,那么就可以了(拓扑排序不唯一)是一道很明显的拓扑排序题,但可以使用邻接表来存储所有的边,非常的节省空间。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?喜欢的话请一件三连,人人都能收获满满offer。,表示如果要学习课程。原创 2024-07-17 11:30:52 · 199 阅读 · 0 评论 -
刷题心得6-环形链表-快慢指针
慢指针每次走一步,快指针每次走两步,在环中,快指针和慢指针一定会相遇的,并且一定会在(慢指针到环上的)第一圈就相遇。此时引入一个ptr,并让ptr和slow都保持1个单位的速度,那么就会在A位置相遇,A位置就是入环的位置。为了表示给定链表中的环,评测系统内部使用整数。为了表示给定链表中的环,评测系统内部使用整数。一开始使用的hash进行求解的(set,非常简单,就不写了)。来表示链表尾连接到链表中的位置(索引从 0 开始)。,返回链表开始入环的第一个节点。,仅仅是为了标识链表的实际情况。原创 2024-07-22 13:50:22 · 634 阅读 · 0 评论 -
刷题心得7-二叉搜索树
以下是题解做法,每次都传当前可以满足的最大和最小值,返回的bool值,判断是否满足条件(我之前使用的找每个节点左侧的最大值和右侧的最小值,然后再遍历一遍看是否满足条件,以下,可以过,但比较难写并且时间复杂度高)根节点左侧的节点值都小于当前节点的值,根节点右侧节点值都大于当前节点的值。排列,请你将其转换为一棵 平衡 二叉搜索树。所以二叉搜索树的中序遍历结果就是排序好的数组。所以大多二叉搜索树的题都可以用中序遍历来做。所有左子树和右子树自身必须也是二叉搜索树。,判断其是否是一个有效的二叉搜索树。原创 2024-09-10 11:51:34 · 178 阅读 · 0 评论