- 博客(22)
- 收藏
- 关注
原创 KMP算法
KMP算法,全称Knuth-Morris-Pratt算法,根据三个作者Donald Knuth、Vaughan Pratt、James H. Morris的姓氏的首字母拼接而成的。是一种字符串匹配的算法,用于在一个文本串S中查找模式串P的位置。public class KMP { public static void main(String[] args) { String x = "abcdefg", y = "cde"; int[] next = new int
2020-07-06 10:54:45 9421 1
原创 300. 最长上升子序列
300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?分析:动态规划适合于求解组合优化问题、方案数等,本题中所求为最长上升子序列为求解最大值问题。动态规
2020-06-28 12:01:51 14857
原创 AVL树
在计算机科学中,AVL树是最早被发明的自平衡二叉查找树。在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是{\displaystyle O(\log {n})}O(\log{n})。增加和删除元素的操作则可能需要借由一次或多次树旋转,以实现树的重新平衡。AVL树得名于它的发明者G. M. Adelson-Velsky和Evgenii Landis,他们在1962年的论文《An algorithm for the organiz.
2020-06-22 10:12:56 14883
原创 二叉搜索树
二叉查找树(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于或等于它的根节点的值;任意节点的左、右子树也分别为二叉查找树;二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为{\displaystyle.
2020-06-16 15:21:33 14784
原创 并查集
在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题。有一个联合-查找算法(union-find algorithm)定义了两个用于此数据结构的操作:Find:确定元素属于哪一个子集。它可以被用来确定两个元素是否属于同一子集。Union:将两个子集合并成同一个集合。由于支持这两种操作,一个不相交集也常被称为联合-查找数据结构(union-find data structure)或合并-查找集合(merge-find set)。其他的重要方法.
2020-06-08 11:39:45 14891
原创 字典树模板
字典树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。import java.util.HashMap;import java.util.Map;public class Trie { private static class Node{ boolean .
2020-05-27 15:30:25 9724
原创 位运算总结
WTCON |= (1 << 5) //WTCON的第五位变1WTCON &= ~(1 << 5) //WTCON的第五位变0WTCON ^= (1 << 5) //WTCON的第五位取反| 有1则为1,没1则为0& 两个为1,则为1,否则为0^ 相同为0,不同为1~ 取反,1变0,0变1num >>> n 最高位置零,无符号右移 相当于num / 2 ^ nnum >> n 忽略最高位,无符号右移 相当于n
2020-05-22 14:32:44 9794
原创 循环队列模板(LoopQueue)
@SuppressWarnings("unchecked")public class LoopQueue<E> implements Queue<E> { private E[] data; private int head, tail, size; public LoopQueue(int capacity) { data = (E[]) new Object[capacity]; head = tail = size
2020-05-21 15:39:26 9705
原创 二叉索引树模板
二叉索引树(Binary Indexed Tree),又叫树状数组,主要是用于解决动态连续和查询问题。public class FenwickTree { private final int[] data; public FenwickTree(int size) { data = new int[size + 1]; } public void update(int delta, int idx) { while (idx <.
2020-05-17 15:26:18 9758
原创 计数排序模板
遍历数组统计最小值min、最大值max是多少建立一个数组cntArray长度为max - min + 1统计每个数出现的次数遍历cntArray,对于cntArray中的每个数所对应的个数放入原数组中public class CounterSort { public static void main(String[] args) { CounterSort counterSort = new CounterSort(); int[] arr = {5, 1.
2020-05-15 10:38:31 10422
原创 线段树模板
定义:线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。对于线段树中的每一个非叶子节点[a,b],它的左儿子表示的区间为[a,(a+b)/2],右儿子表示的区间为[(a+b)/2+1,b]。因此线段树是平衡二叉树,最后的子节点数目为N,即整个线段区间的长度。使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N,因此有时需要离散化让空间压缩。public class Segm
2020-05-12 11:25:16 9827
原创 选择排序模板
选择排序:每次都选择最小的数放在已经排序好的序列之后,直到所有的序列都被排好序。import java.util.Arrays;public class SelectSort { public static void main(String[] args) { int[] arr = {2, 1, 4, 3, 5, 7, 6, 9, 8, 0}; s...
2020-05-06 15:10:22 9723
原创 希尔排序模板
希尔排序原理:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。代码:import java.util.Arrays;import java.util.HashMap;import java.util.Iterator;import java.util.Map;p...
2020-04-29 13:53:51 9792
原创 归并排序模板
归并排序原理:1、将一个数组一份为二2、递归处理前后段,使前后半有序3、将前后半段进行归并得到有序数组import java.util.Arrays;public class MergeSort { public static void main(String[] args) { int[] arr = {2, 1, 4, 3, 5, 7, 6, 9, 8, 0...
2020-04-27 14:43:42 9715
原创 堆排序模板
堆排序原理:本文中使用的堆为最大堆,堆顶元素为索引为0的元素。1、将一个无序的数组构建成一个最大堆2、交换0号元素和最后一个元素,则最后一个元素(索引假设为 lastIndex )为最大的元素3、将[0 ~ lastIndex - 1]的元素构建最大堆,则0号元素为最大元素4、交换 0 和 lastIndex - 1的元素,则 lastInde - 1, lastIndex元素有序。5...
2020-04-23 18:27:23 9752
原创 冒泡排序模板
冒泡排序原理:相邻元素两两比较大的往后放import java.util.Arrays;import java.util.Random;public class BubbleSort { public static void main(String[] args) { int[] arr = new int[]{2, 3, 1, 4, 5}; bub...
2020-04-20 16:42:02 9985
原创 插入排序模板
插入排序步骤数组只有一个数是数组有序数组元素超过两个,从第二个数x开始,和前一个数y比较,存在三种情况(x == y, x > y, x < y)x == y x 和 y 有序x > y x 和 y 有序x < y 需要将x插入到0 ~ (x - 1)的合适位置public static void insertSort(int[] arr) ...
2020-04-16 11:26:45 9713
原创 SQL行、列之间转换
一、行转列即将原本同一列下多行的不同内容作为多个字段,输出对应内容。建表语句 DROP TABLE IF EXISTS tb_score; CREATE TABLE tb_score( id INT(11) NOT NULL auto_increment, userid VARCHAR(20) NOT NULL COMMENT...
2020-04-08 15:47:38 9877
原创 动态规划解题步骤
动态规划解题步骤?判断原问题是否能用递归解决分析递归过程中是否存在重复子问题采用备忘录法记录重复子问题的解(剪枝)改用自底向上的地推(动态规划)我们以编辑距离为例来分析上面的步骤:给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 ...
2020-04-06 21:55:23 10161
原创 在浏览器当中输入URL背后发生了什么?
在浏览器当中输入URL背后发生了什么?DNS解析TCP连接发送HTTP请求服务器处理请求并返回HTTP报文浏览器解析渲染页面连接结束
2020-04-04 20:22:06 9733
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人