03 2021 档案
摘要:KMP算法 我们知道常规的暴力匹配子串解题思路是 从父串每一个位置向后探查子串长度个字符,与子串一一匹配,如果中途出现不匹配字符则提前停止探查,继续从父串的下一个位置向后探测,父串每次匹配失败,都是向后移动一个位置,在进行探测,这样的效率很低。 可以看到当匹配到最后一个字符时,匹配失败。然后父串索引
阅读全文
摘要:无头节点的单链表中如何删除结点 在有头结点的单链表中,删除结点的方式是,通过找到删除节点的前面一个结点,将前一个结点的next指向删除结点的next pre->next = cur.next; pre 可以预设为 head(头结点),比较 pre.next 和待删除的结点,当 pre.next==d
阅读全文
摘要:斐波那契查找算法 核心思想就是利用斐波那契公式来表示数组,将数组分割,通过比较分割点的大小 向左或者向右继续利用斐波那契公式来表示分割子数组 public class FibonacciSearch { public static int maxSize = 20; public static vo
阅读全文
摘要:CopyOnWriteArrayList Java中多线程读写List,有两种选择: Vector CopyOnWriteArrayList Vector 中几乎所有读写操作都增加了synchronized, 意味着在多线程环境下,如果有多个线程同时想要操作这个 Vector,必须串行排队等着前面的
阅读全文
摘要:基数排序 基本思想: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。 图文说明: 将数组 {53, 3, 542, 748, 14, 214} 使用基数排序, 进行升序排序。 代码
阅读全文
摘要:归并排序 归并排序基本思想: 将原数组从中间分开,分成两个子数组,然后继续将子数组从中间分开,直到把所有子数组分解到只有 一个元素,此时分的过程就结束了 然后开始治,递归回退一层,将两个子数组合并成一个新的有序的数组,然后依次回退与其它子数组合并成 新的数组,直到合并成原始数组 归并排序基本思想示意
阅读全文
摘要:快速排序 原理:递归+分治 从数组中选取一个基准点,将数组中小于这个基准点的元素放到基准点左边,大于这个基准点的元素放到右边 默认每次选取最后一个元素当作基准点,定义变量i,j分别指向数组的左端和右端前一个元素 i 向右移动扫描比基准点大的数, 如果比基准点小或等于则继续移动, j 向左移动扫描比基
阅读全文
摘要:插入排序 思路: 1)将数组看成无序和有序两段,默认第一个元素在有序段,后面n-1个元素在无序段 2)每次取出无序段的第一个元素,在有序段找到合适的位置插入 3)如何找到合适的插入位置? 4)从有序段的最后一个元素向前遍历,假如每次遍历的元素所在索引就是插入位 insertIndex 5)如果是升序
阅读全文
摘要:希尔排序 我们知道,插入排序的原理是将一个数组看成两段,一段有序的,一段无序的, 每次将无序的数字中第一个数在有序的一段中找到合适位置插入 插入排序有一个特征就是如果数组呈现接近有序,那么排序的速度就会很快 如:5, 1, 2, 7, 9, 8 只需将1插到5前面,2插到1、5中间,7不动,9不动,
阅读全文
摘要:时间复杂度 时间频度 → 时间复杂度 语句执行的次数就是时间频度T(n) 时间频度 T(n) 不同,但时间复杂度可能相同,如: T(n)=n²+7n+6与T(n)=3n²+2n+2它们的T(n)不同,但时间复杂度相同,都为O(n²)。 时间复杂度计算方法: 用常数1代替运行时间中的所有加法常数T(n
阅读全文
摘要:迷宫问题 实现算法:递归+回溯 初始迷宫 思路 map 表示地图 i, j 表示从地图的哪个位置开始出发(1,1) 如果小球能到map[6][5] 位置,则说明通路找到 约定:当map[i][j] 为 0 表示该点没有走过;当为 1 表示墙; 2 表示通路可以走;3 表示该点已经走过,但是走不通 在
阅读全文
摘要:栈的应用(中缀表达式转逆波兰表达式) 思路: 因为中缀表达式对于操作符的优先级很不好计算,就将中缀转成计算机更容易识别的后缀表达式 中缀表达式转后缀表达式的思路步骤分析: 初始化两个栈:运算符栈s1和存储中间结果的栈s2 从左至右扫描中缀表达式 遇到操作数时,将其压入s2 遇到运算符时: 1.如果s
阅读全文
摘要:栈的应用(逆波兰表达式的计算) 因为中缀表达式对于操作符的优先级很不好计算,就将中缀转成计算机更容易识别的后缀表达式 中缀转后缀表达式写法: a+b => a b + a+(b-c) => a b c - + a+(b-c)*d => a b c - d * + a+d*(b-c) => a d b
阅读全文
摘要:约瑟夫环(单向环形链表) 准备结点类 class Boy { private int no; private Boy next; //指向下一个结点 } 准备链表类 class CircleSingleLinkedList { private Boy first = null; } 构建一个约瑟夫环
阅读全文
摘要:双向链表(增删改查) 准备结点类 结点类应该包含 前驱、后驱、DATA域 class HeroNode2 { public int no; public String name; public String nickName; public HeroNode2 next; //指向下一个结点 pub
阅读全文
摘要:数据结构:单链表(增删改查) 准备一个结点类 class HeroNode { public int no; public String name; public String nickName; public HeroNode next; //指向下一个结点 public HeroNode(int
阅读全文
摘要:数据结构:循环队列(数组实现) 首先准备基本类 class CircleArray { private int maxSize; //表示队列的最大容量 //front 就指向队列的第一个元素,也就是说arr[front] //front 初始值 0 private int front; //rea
阅读全文
摘要:Linux下修改Mysql登录密码 1.在/etc/my.cnf [mysqld]下添加skip-grant-table,保存退出 2.重启mysql服务 systemctl stop mysqld.service systemctl start mysqld.service 3.免密登录 mysq
阅读全文
摘要:原文链接:https://mp.weixin.qq.com/s/aMJeiQW5z5FzeEdsRn44vA
阅读全文
摘要:记录一下在Linux服务器下实现端口转发 转发端口实现步骤: iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 如果防火墙重启,该转发规则会失效,将该规则保存到防火墙规则中 service iptab
阅读全文
摘要:原文连接:https://mp.weixin.qq.com/s/AndIwanhZ3Tlg0iQe8a4lQ
阅读全文

浙公网安备 33010602011771号