数据结构和算法
文章平均质量分 61
厉兵秣码
这个作者很懒,什么都没留下…
展开
-
二分法(数组没有重复数字和有重复数字)
二分查找(数字不重复和重复的情况)原创 2022-02-25 22:10:11 · 651 阅读 · 0 评论 -
trie字典树使用
参考一下文章,写代码自己记录下数据结构与算法:字典树(前缀树)字典树节点class TrieNode { //表示以当前单词结尾的单词数量。 int count; //表示以当前节点之前(包括当前节点)的字符串为前缀的字符串个数 // 表示以该处节点之前的字符串为前缀的单词数量 int prefix; TrieNode[] nextNode = new TrieNode[26]; public TrieNode() { coun原创 2021-08-01 15:39:41 · 82 阅读 · 0 评论 -
Morries法遍历二叉树
参考 树(一)——Morris 二叉树神级遍历为什么可以不采用辅助结构??首先思考一下,为什么我们要用栈或者队列来辅助我们遍历?因为二叉树的结构是,一个父节点可以轻松的找到子节点,但是子节点无法直接找到父节点。我们需要利用栈或者队列保存访问的记录,以便于我们可以回溯到父节点。Morris 遍历采用多个指针,使得通过复杂度不高的操作可以找到父节点。Morris 遍历Morris 遍历是一种节省空间复杂度的方法。将叶子节点上的空指针利用起来,指向父节点,当再次遍历到这个节点的时候再修改回来,这样最原创 2021-07-17 23:09:04 · 240 阅读 · 2 评论 -
二分查找(数字不重复和重复的情况)
怎么写出无bug的二分查找算法代码1二分查找单调递增数列中没有重复的数字 public static int binarySearch(int[] nums, int tar) { int low = 0; int high = nums.length - 1; int mid; while (low <= high) { mid = (low + high) / 2; if (原创 2021-06-27 00:22:01 · 422 阅读 · 0 评论 -
二叉树的递归和非递归遍历
参考文章:详解二叉树的非递归遍历二叉树的非递归遍历的思考二叉树的遍历1结构体:节点class Node{ int data; Node left; Node right; public Node(int data,Node left,Node right){ this.data=data; this.left=left; this.right=right; }}2递归遍历 //前序遍历递归原创 2021-06-26 21:11:05 · 116 阅读 · 0 评论 -
BM算法(字符串模式匹配)
参考的该篇文章:字符串匹配算法(BM)https://blog.csdn.net/qq_21201267/article/details/92799488详细推倒过程参考上面的链接,以下仅是个人笔记1求坏字符 //坏字符规则:获得坏字符数组 //该int[]浪费空间,可以优化,badChars[c-‘a’] = i; public static void getBc(String pat, int[] badChars) { int len = pat.leng原创 2021-06-24 00:13:34 · 219 阅读 · 0 评论 -
排序方法总结
时间复杂度常见的时间复杂度,按数量级递增排列依次为:常数阶O(1)、对数阶O(log2n)、线性阶O(n)、线性对数阶O(nlog2n)、平方阶O(n2)、立方阶O(n3)、k次方阶O(nk)、指数阶O(2n)。常见的算法时间复杂度由小到大依次为: c < log2N < n < n * Log2N < n^2 < n^3 < 2^n < 3^n < n!其中c是一个常量,如果一个算法的复杂度为c 、原创 2021-06-14 23:00:10 · 148 阅读 · 2 评论 -
BF和KMP算法
参考KMP算法主要是看了上面的讲解,自己做一下记录,加深印象BF算法t为目标串,p为模式串暴力解:思想:先从第一个字符开始匹配,如果p[j]==t[i],那么继续向下比较,一旦不相等,即回溯到目标串的下一个字符,重复工作。成功条件:当循环结束时,判断j的值与模式串p的长度是否相等,如果相等,说明匹配成功到了模式p的最后一个字符。返回值:返回模式串在目标串中出现的位置。方式一: public static int bf(String t,String p){ char[]原创 2021-06-08 00:08:25 · 163 阅读 · 0 评论 -
排序之(1)插入排序
插入排序基本思想:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止。算法实现:直接插入排序是将无序序列中的数据插入到有序的序列中,在遍历无序序列时,首先拿无序序列中的首元素去与有序序列中的每一个元素比较并插入到合适的位置,一直到无序序列中的所有元素插完为止。对于一个无序序列arr{7,6,5,9,2}来说,我们首先先确定首元素4是有序的,然后对无序序列{6,5,9,2}遍历,6小于7则它插入到7的前面,得到{6,7,5,9,2};再继续遍历到5,5小于7,则5应该插入到7原创 2021-01-31 22:33:41 · 399 阅读 · 0 评论