算法
文章平均质量分 83
田埂、
不惊于荣辱,不借于鼓吹,正余之心,穷于之力
展开
-
CSDN编程竞赛第三期 参赛经历分享
奖品还是挺不错的:比赛嘛,最终重要的还是锻炼自己。不管怎么样,通过参加比赛发现自己的不足,有进步了总归是好的,也别太在乎这成绩,就当练手了。原创 2022-08-27 21:56:48 · 1094 阅读 · 1 评论 -
字典树(前缀树)
为什么需要用字典树解决这类问题呢?假如我们有一个储存了近万个单词的字典,即使我们使用哈希,在其中搜索一个单词的实际开销也是非常大的,且无法轻易支持搜索单词前缀。然而由于一个英文单词的长度 n 通常在 10 以内,如果我们使用字典树,则可以在 O(n)——近似 O(1)的时间内完成搜索,且额外开销非常小。原创 2021-08-04 16:37:19 · 219 阅读 · 2 评论 -
链表(单链表)
(单)链表是由节点和指针构成的数据结构,每个节点存有一个值,和一个指向下一个节点的指针,因此很多链表问题可以用递归来处理。不同于数组,链表并不能直接获取任意节点的值,必须要通过指针找到该节点后才能获取其值。同理,在未遍历到链表结尾时,我们也无法知道链表的长度,除非依赖其他数据结构储存长度。原创 2021-08-02 00:34:32 · 173 阅读 · 1 评论 -
搜索(DFS+BFS+回溯法)
一切皆可搜索概述深度优先搜索回溯法广度优先搜索练习:概述深度优先搜索和广度优先搜索是两种最常见的优先搜索方法,它们被广泛地运用在图和树等结构中进行搜索。深度优先搜索深度优先搜索(depth-first seach,DFS)在搜索到一个新的节点时,立即对该新节点进行遍历;因此遍历需要用先入后出的栈来实现,也可以通过与栈等价的递归来实现。对于树结构而言,由于总是对新节点调用遍历,因此看起来是向着“深”的方向前进。深度优先搜索也可以用来检测环路:记录每个遍历过的节点的父节点,若一个节点被再次原创 2021-07-31 20:13:30 · 464 阅读 · 1 评论 -
二分查找(折半查找)
二分查找算法二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复杂度为 O(log n)。原创 2021-07-25 00:57:18 · 485 阅读 · 1 评论 -
玩转双指针
双指针概念:双指针主要用于遍历数组,两个指针指向不同的元素,从而协同完成任务。也可以延伸到多个数组的多个指针。若两个指针指向同一数组,遍历方向相同且不会相交,则也称为滑动窗口(两个指针包围的区域即为当前的窗口),经常用于区间搜索。若两个指针指向同一数组,但是遍历方向相反,则可以用来进行搜索,待搜索的数组往往是排好序的。Two Sum167.两数之和 II - 输入有序数组题解:因为数组已经排好序,我们可以采用方向相反的双指针来寻找这两个数字,一个初始指向最小的元素,即数组最左边,原创 2021-07-23 00:58:01 · 144 阅读 · 0 评论 -
最易懂的贪心算法
顾名思义,贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优的。原创 2021-07-22 01:32:41 · 300 阅读 · 2 评论 -
八种排序算法与代码实现(java代码实现)
八种排序算法与代码实现堆排序思路:1.将序列构建成大顶堆。2.将根节点与最后一个节点交换,然后断开最后一个节点。3.重复第一、二步,直到所有节点断开。/** * 堆排序 * * @param arr 待排序的数组 */ public void headSort(int[] arr) { int len = arr.length - 1; //利用循环 排成大顶堆 (叶子结点 小于父节点 满足a[i]>a[i原创 2021-07-15 12:04:54 · 113 阅读 · 0 评论 -
(Rabin-Karp算法)匹配字符串(滚动哈希)
(Rabin-Karp算法)匹配字符串(滚动哈希)Rabin-Karp算法的思路是将字符串的比较转换成数字的比较。比较两个长度为m的字符串是否相等需要O(m)的时间,而比较两个数字是否相等通常可以是O(1)。为了将字符串映射到对应的数字,故此需要用到哈希函数。接下来的问题是,如何快速将字符串映射到对应的数字呢?如果需要在 O(L)的时间内算出编码,这种方法就没有意义了,因为这个直接进行字符串比较需要的时间相同。为了能够快速计算出字符串编码,我们可以将字符串看成一个 26 进制的数(因为字符串中仅原创 2021-07-14 23:56:42 · 622 阅读 · 1 评论