![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码随想录算法学习
文章平均质量分 96
Xf3n1an
这个作者很懒,什么都没留下…
展开
-
算法学习——动态规划
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。这是标准的背包问题,以至于很多同学看了这个自然就会想到背包,甚至都不知道暴力的解法应该怎么解了。原创 2023-12-24 10:09:02 · 1588 阅读 · 0 评论 -
算法学习——二叉树
我们来看看链式存储的二叉树节点的定义方式。int val;原创 2023-12-22 06:42:08 · 1243 阅读 · 0 评论 -
算法学习——回溯算法
从下图中红线部分可以看出,在集合[1,2,3,4]取1之后,下一层递归,就要在[2,3,4]中取数了,那么下一层递归如何知道从[2,3,4]中取数呢,靠的就是startIndex。第一次取1,集合变为2,3,4 ,因为k为2,我们只需要再取一个数就可以了,分别取2,3,4,得到集合[1,2] [1,3] [1,4],以此类推。示例: 输入: n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]原创 2023-12-19 21:24:27 · 916 阅读 · 0 评论 -
算法学习——栈与队列
如果还记得编译原理的话,编译器在词法分析的过程中处理括号、花括号等这个符号的逻辑,就是使用了栈这种数据结构。再举个例子,linux系统中,cd这个进入目录的命令我们应该再熟悉不过了。这个命令最后进入a目录,系统是如何知道进入了a目录呢 ,这就是栈的应用。这在leetcode上也是一道题目,编号:71. 简化路径,大家有空可以做一下。原创 2023-12-18 22:06:51 · 851 阅读 · 0 评论 -
算法学习——双指针法
原地移除数组上的元素,不能真正的删除,只能覆盖。i++) {这个代码看上去好像是O(n)的时间复杂度,其实是O(n^2)的时间复杂度,因为erase操作也是O(n)的操作。所以此时使用双指针法才展现出效率的优势:通过两个指针在一个for循环下完成两个for循环的工作。原创 2023-12-17 20:37:04 · 1024 阅读 · 0 评论 -
算法学习——字符串
说到KMP,先说一下KMP这个名字是怎么来的,为什么叫做KMP呢。因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP。匹配过程:在对主字符串(通常称为 “text”)和模式字符串(通常称为 “pattern”)进行匹配时,我们从主字符串的开始位置和模式字符串的开始位置开始匹配。当出现不匹配的情况时,我们利用 next 数组跳过那些不可能匹配的位置。写过KMP的同学,一定都写过next数组,那么这个next数组究竟是个啥呢?原创 2023-12-16 23:22:22 · 817 阅读 · 0 评论 -
算法学习——哈希表
一般来说哈希表都是用来快速判断一个元素是否出现集合里。对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用。哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。接下来是常见的三种哈希结构:数组set(集合)map(映射)在C++语言中,set 和 map 都分别提供了三种数据结构,每种数据结构的底层实现和用途都有所不同。原创 2023-12-15 21:44:28 · 728 阅读 · 0 评论 -
算法学习——链表
int data;ListNode(int val) : data(val) , next(NULL) //节点的构造函数 {} };定义构造函数是为了方便我们创建节点的时候能够直接给节点初始化。如果我们不定义构造函数,使用编译器默认生成的构造函数,需要这两行代码。我们首先需要掌握链表的增删改查等基本操作。其次,为了对链表进行方便的操作,我们一般使用虚拟头结点。反转链表是高频题目,主要有迭代法和递归法。在删除倒数N个节点的题目中,使用了双指针法。最后的环形链表主要是数学证明。原创 2023-08-09 14:56:26 · 71 阅读 · 0 评论 -
算法学习——数组
在二分法以及螺旋矩阵问题中,我们始终遵循循环不变量原则,在循环中坚持对区间的定义。在移除元素以及有序数组的平方中,我们都使用了双指针法。在长度最小的子数组中,我们使用了滑动窗口方法。原创 2023-07-19 14:32:45 · 49 阅读 · 0 评论