- 博客(8)
- 问答 (1)
- 收藏
- 关注
原创 二分查找全解
二分查找算法,也叫折半查找算法。二分查找的思想非常简单,有点类似分治的思想。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。public://查找第一个出现的位置和最后一个出现的位置:查找第一个出现位置,查找最后一个出现位置int left=0;exist=mid;break;//查找第一个出现的位置left=0;
2023-08-11 02:31:07
95
1
原创 详解前缀树
前缀树又名字典树,单词查找树,Trie树,是一种多路树形结构,是哈希树的变种,和hash效率有一拼,是一种用于快速检索的多叉树结构。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度的减少无谓的字符串比较,查询效率比哈希表高。Trie树的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie树也有它的缺点,那就是内存消耗非常大。
2023-08-11 00:19:22
317
1
原创 Leetcode 回溯算法全家桶
前面我们说到回溯算法时,已经强调了它有时间复杂度较高这一缺点,而剪枝操作正可以优化我们解题过程中的时间复杂度,具体怎么优化呢?在暴力枚举,递归的过程中,常常会形成一个树形结构,我们可以根据问题情况和已有条件来剪掉树形结构中冗余的枝条,也就是在暴力枚举时省去一些不必要的递归过程,那么我们的时间复杂度和空间复杂度也就优化了。回溯算法就是一个暴力枚举,搜索尝试的过程,在发现列举情况不符合问题解时,我们这时会回溯,尝试别的路径。既然是暴力枚举,那么时间复杂度必然很高,那么我们为什么要学习回溯算法呢?
2023-08-09 02:37:03
73
1
原创 Leetcode 动态规划(1)动态规划入门
这些题目作为想要尝试动态规划的新手来说是非常适合的,不涉及一些比较难的动态规划问题,按照顺序理解并掌握这些动态规划的问题,就可以算是动态规划入门了。
2023-08-05 01:14:21
78
1
原创 八皇后问题
利用搜索回溯的思想,我们枚举出每一种情况,然后在根据条件进行筛选,找到满足期望的值。我们把求解过程分为多个阶段,每个阶段我们都会面临一个十字路口,我们随便找一条路,走不通后,就回到上一个十字路口,选择另一条路进行下一步,直到遍历完全部情况,最终得到所有答案。八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
2023-07-22 17:21:08
77
1
原创 KMP算法
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特--莫里斯--普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。
2023-07-15 15:15:28
111
1
空空如也
学习c++一个月,有个很简单的问题想不明白
2022-11-02
TA创建的收藏夹 TA关注的收藏夹
TA关注的人