
算法学习
文章平均质量分 90
根据《算法导论》的内容,选择LeetCode题目进行实战
10000hours
这个作者很懒,什么都没留下…
展开
-
【LeetCode刷题记录】数组专题
在暴力解法的最内层循环中,我们是固定指针i,j,移动指针k来寻找结果,能不能每次只固定一个指针,然后移动另外两个指针,这样就能减少一层循环。可以采用双指针法,一个指针从前向后移动,另一个指针从后向前移动,并记录移动过程中的最大水量,这样就可减少一层循环,降低时间复杂度。通过上面的的“使用额外空间”的方法,可以看到,最后有用的是最中间的一个值(或最中间的两个值),那么可以在遍历的过程中只保存中间的值,最后只利用最中间的值。此时计算结果就是7.5。首先想到的是暴力解法,嵌套循环寻找最大值,但是暴力解法超时了。原创 2023-04-27 18:48:17 · 924 阅读 · 1 评论 -
【C++优先队列使用】问题总结
最后做个小实验,自定义比较逻辑,验证结果的正确性。int x,y;}A;//定义sort的比较逻辑if(a.x!//定义priority_queue的比较逻辑if(a.x!i++)while(!pq.pop();return 0;1 91 82 93 94 64 63 92 91 81 9其实关于sort和优先队列的自定义比较逻辑都是if(a.x!原创 2023-11-10 21:49:37 · 904 阅读 · 0 评论 -
【KMP算法】学习总结
因为不匹配的‘f’之前的子串——‘aabaa’的最长相同前后缀长度为2,即‘b’的下标。‘f’失配,但是‘aabaa’是和主串相匹配的,也就是说模式串中的“aa”(下标为3,4)与主串中的“aa”(下标为3,4)是相匹配的,而且子串“aabaa”中,后缀“aa”有最长相同的前缀“aa”(下标为0,1),也就是说这个前缀“aa”(下标0,1)和主串中的“aa”(下标为3,4)也是相匹配的,所以无需重复比较,直接将指针回退到模式串的‘b’位置继续比较即可。原创 2023-11-23 14:09:58 · 410 阅读 · 0 评论 -
【TopK问题】基于堆的方法&基于分治策略的方法
它利用数组中的一个元素作为pivot,将下标从left到right的元素分为两部分,并以pivot为枢轴将比pivot小的元素放在左边,比pivot大的元素放在右边,通过不断划分数组,最终获得整体的排序。在TopK问题中也利用了这种不断划分的分治策略,但是在快排中,每次要处理左右两部分,在TopK问题中对这一步骤做了简化,即每次只处理一边。因为要找的是最大/最小的k个元素,因此可以通过比较。问题要求得到最大的k个元素,就可以构建含有k个元素的小根堆(相应地,若是求最小的k个元素,就构建大根堆)。原创 2023-11-07 00:15:08 · 514 阅读 · 0 评论 -
【10种排序算法总结】C++实现
之后减小d的值,重复执行分组和排序操作,直至d大小为1,此时得到整体有序的序列。算法思想:桶排序是一种非基于比较的排序算法,通过构建多个映射数据的桶,将数据映射到桶内,对桶内数据进行排序,以空间换时间来实现排序的目的,相当于计数排序的升级。算法描述:依次划分序列直至所有子序列长度为1,依次归并前后相邻的两个子序列,使归并后的序列有序,直至所有的子序列归并完毕,得到整体有序的序列。算法描述:第i趟排序,序列L[0]~L[i-1]为有序子序列,将L[i]插入这个有序子序列中,经过n趟排序得到整体有序的序列。原创 2023-10-31 11:45:21 · 608 阅读 · 1 评论 -
【二叉树遍历总结】C++实现
1. 总结了二叉树的3种遍历方式(先序、中序、后序)的不同实现 - 递归方法实现 - 迭代方法实现2. 用不同的数据结构定义二叉树 - 结构体定义树结点 - 用数组定义二叉树3. 文章内容为个人的学习总结,如有错误,欢迎指正原创 2023-11-03 21:50:20 · 332 阅读 · 0 评论