
算法知识
文章平均质量分 74
数据结构知识和相关实现内容,算法相关内容的总结。
攻城狮Chova
一位有自我修养的攻城狮。
2006年《时代》周刊年度人物,
2008年感动中国组委会特别奖获得者。
展开
-
数据结构中的排序算法
数据结构中的排序算法基本概念基本概念通常需要熟练掌握快速排序和归并排序要熟练掌握各种排序算法之间的优缺点,各种算法的思想以及各种算法的使用场景,还要熟练分析各种算法之间的时间复杂度和空间复杂度排序: 对一序列的对象按照某个关键字的顺序进行展示排序相关术语:稳定:...原创 2021-04-18 10:15:47 · 326 阅读 · 0 评论 -
一位攻城狮的算法修养
程序员需要掌握的算法数据结构与算法算法基础基础数据结构线性表栈与队列哈希表树数组常见算法十大排序算法图论算法搜索与回溯算法动态规划字符串匹配算法流相关算法数据结构与算法算法基础时间复杂度空间复杂度最大复杂度平均复杂度基础数据结构线性表顺序表链表跳跃表并查集栈与队列栈队列优先队列堆多级反馈队列哈希表碰撞解决办法:开放地址法链地址法再次哈希法建立公共溢出区布隆过滤器树二叉树: 各种遍历,递归与非递归哈夫曼树与编码AVL树B树与原创 2020-06-06 08:50:27 · 451 阅读 · 0 评论 -
算法Day11-动态规划之高楼扔鸡蛋
高楼扔鸡蛋问题基本概念基本概念高楼扔鸡蛋问题:有一栋1到N的N层楼,有k个鸡蛋,其中k至少为1已经去顶这栋楼存在楼层0<=F<=N,0 <= F <= N,0<=F<=N, 在这层将鸡蛋扔下楼,鸡蛋恰好没碎,即高于F的楼层鸡蛋都会碎,低于F的楼层鸡蛋都不会碎在最坏的情况下,至少要扔几次鸡蛋,能够确定这样的楼层F最坏情况: 鸡蛋破碎的情况一定是发生在搜索区间穷尽时不考虑鸡蛋个数比如楼层一共有7层,扔鸡蛋最原始的方式就是从第1层开始扔鸡蛋尝试,如果扔到原创 2020-11-09 09:42:24 · 637 阅读 · 0 评论 -
算法Day10-动态规划之编辑距离
编辑距离基本概念问题分析基本概念编辑距离问题:编辑距离问题困难,解法却是很漂亮,而且也是少有的比较实用的算法编辑距离使用场景:对于修改文章的错位内容.限制文章只能修改20个字,且支持增,删,替换操作,求修改的最优方案对于衡量DNA的相似程度 .DNA序列是由A, G, C, T组成的序列,可以类比成字符串,可以通过编辑距离衡量两个DNA序列的相似度,编辑距离越小,说明这两个DNA序列越相似问题分析编辑距离问题:给定两个字符串s1和s2, 只能使用3种操作,将s1变成s2原创 2020-10-28 13:36:21 · 408 阅读 · 0 评论 -
算法Day09-动态规划之最长递增子序列
动态规划详解基本概念基本概念动态规划问题的一般形式就是求最值: 求最长递增子序列,最小编辑距离等等动态规划求最值的核心问题就是穷举: 因为要求最值,肯定要将所有的可行解穷举出来,然后在可行解中找到最值动态规划的穷举存在重叠子问题: 存在重叠子问题,如果暴力穷举会导致效率低下,所以需要 [备忘录] 或者 [DP table] 来优化穷举过程来避免不必要的计算动态规划问题一定会具备最优子结构,这样才能通过子问题的最值得到原问题的最值动态规划问题只有列出正确的状态转移方程才能正确地穷举: 动态规划的原创 2020-09-15 10:01:35 · 415 阅读 · 0 评论 -
算法Day08-算法研习指导之Linux基本介绍
Linux的进程,线程和文件描述符基本概念进程计算机结构基本概念在Linux中,进程就是一个数据结构理解文件描述符,重定向,管道命令的底层工作原理,就可以从操作系统的角度理解Linux中的线程和进程是没有区别的进程计算机结构计算机结构:内存空间:上半部表示用户空间下半部表示内存空间进程磁盘输入输出设备用户空间: 装着用户进程需要使用的资源内核空间: 存放内核进程需要加载的系统资源,这些资源一般是不允许用户访问的. 但是有的用户进程会共享一些内核空间的资源,比如一原创 2020-09-01 09:41:52 · 294 阅读 · 0 评论 -
算法Day07-算法研习指导之双指针
双指针技巧基本概念快慢指针判断链表中是否包含环返回有环链表中环的起始位置当快慢指针相遇时,让其中的任意指针指向头结点**head.** 然后快慢指针以相同的速度前进,再次相遇时所在的节点位置就是环的开始位置:基本概念双指针技巧分为两类:快慢指针:主要解决链表中的问题比如判定链表中是否包含环左右指针:主要解决数组或者字符串问题比如二分查找快慢指针快指针:初始化指向链表的头结点head前进时快指针fast在前,慢指针slow在后可以巧妙解决链表中相关的问题原创 2020-08-27 08:58:32 · 368 阅读 · 0 评论 -
算法Day06-算法研习指导之滑动窗口
滑动窗口基本概念基本概念滑动窗口: 是高级双指针技巧的算法框架,涉及字符串匹配问题滑动窗口使用的数据结构:unordered_map : 哈希表包含一个方法count(key), 相当于containsKey(key). 可以判断key是否存在map[key] :可以使用方括号访问键对应的值map[key]. 需要注意,如果该key不存在,会自动创建这个key, 并且将map[key] 赋值为0map[key]++ 相当于Java的map.put(key, map.getOrDe原创 2020-08-21 08:49:57 · 327 阅读 · 0 评论 -
算法Day05-算法研习指导之二分查找
二分查找基本概念基本概念二分查找: 思路很简单,细节很重要给mid加1还是减1while中是使用 <= 还是 <二分查找的场景:寻找一个数寻找左侧边界原创 2020-08-11 09:49:29 · 547 阅读 · 0 评论 -
算法Day04-算法研习指导之回溯算法框架
回溯算法框架回溯算法基本概念全排列问题回溯算法基本概念回溯算法框架 : 解决一个回溯问题,实际上就是一个决策树的遍历过程路径: 已经做出的选择选择列表: 当前可以做的选择结束条件: 到达决策树底层,无法再做选择的条件回溯算法框架代码:result[];def backTrack(路径, 选择列表): if 满足条件: result.add[路径] return for 选择 in 选择列表: 做选择 backTrack(路径, 选择列表) 撤销选择原创 2020-07-29 12:09:34 · 365 阅读 · 0 评论 -
算法Day03-算法研习指导之动态规划算法详解
动态规划算法详解动态规划算法问题最优子结构动态规划算法问题什么叫作最优子结构? 和动态规划有什么关系?为什么动态规划遍历DP数组的方式有正着遍历,有倒着遍历,有斜着遍历?最优子结构最优子结构是某些问题的一种特定的性质,并不是动态规划问题所特有的.很多问题都具有最优子结构,但是其中大部分不具有重叠子问题,所以不会归为动态规划系列的问题最优子结构:可以从子问题的最优结果推导出更大规模问题的最优结果子问题之间必须相互独立通过改造问题来优化由于子问题之间不独立而导致的最优子结构失效的原创 2020-07-03 08:46:12 · 335 阅读 · 0 评论 -
算法Day02-算法研习指导之动态规划算法框架
动态规划算法框架动态规划算法动态规划算法动态规划问题的一般形式就是求最值:动态规划是运筹学的一种最优化方法动态规划的应用场景:求最长递增子序列求最小编辑距离动态规划的核心问题:穷举因为要求最值,肯定要将所有可行的答案穷举出来,然后在其中找最值动态规划的穷举很特殊:存在重叠子问题:如果暴力穷举效率低下需要使用备忘录或者DP Table来优化穷举过程,避免不必要的计算具备最优子结构: 这样才能通过子问题的最值找到原问题的最值列出正确的状态转移方程才能正确原创 2020-07-01 09:51:27 · 376 阅读 · 0 评论 -
算法Day01-算法研习指导之算法框架思维
算法研习指导算法的框架思维数据结构的存储方式算法的框架思维数据结构的存储方式数据结构的存储方式只有两种:数组: 顺序存储链表: 链式存储散列表, 栈, 队列, 堆, 树, 图都是通过数组和链表的结构基础实现的上层建筑...原创 2020-06-28 09:43:04 · 430 阅读 · 0 评论 -
二叉树的遍历
二叉树的遍历基本概念基本概念二叉树的遍历总体分为两大类:深度遍历:前序遍历 : 根节点 -> 左子树 -> 右子树中序遍历 : 左子树 -> 根节点 -> 右子树后续遍历 : 左子树 -> 右子树 -> 根节点广度遍历:层次遍历: 按照层次从上到下,从左到右遍历即可...原创 2021-01-28 12:43:00 · 293 阅读 · 0 评论 -
数据结构中红黑树
红黑树简介树二叉搜索树初始化搜索节点删除节点树树:数据结构中是以二叉堆的形式出现的如果从链表的观点出发,相当于是放宽了有序的的要求允许两个不同位置的元素有相等的序对于序为n的节点来说,可以指向多个序为n+1的节点:相应的后者称为前者的孩子前者称为后者的父节点最大的序即为树的高度0节点的左右两个节点分别为0节点的左子节点和右子节点0节点也是这两个子节点的父节点...原创 2020-01-13 20:13:40 · 640 阅读 · 0 评论 -
Java中String的优化处理
字符串String的优化处理String对象特点不变性常量池优化String对象特点String对象是Java中重要的数据类型String对象的特点:不变性常量池优化final定义不变性String对象的状态在创建之后就不再发生变化当一个String对象被多线程共享,而且被频繁访问时.可以省略同步和锁的时间,从而提高性能常量池优化常量池优化: 当两个String对象拥有同一个常量值的时候,都是引用了常量池中同一个拷贝这样,当程序中某个字符串频繁出现时,常量池优化技术可原创 2020-08-16 06:28:53 · 486 阅读 · 0 评论 -
Java代码优化小结
Java代码优化代码优化代码优化方式指定类和方法的final修饰符重用对象使用局部变量及时关闭流减少对重复变量的计算懒加载策略谨慎使用异常不要在循环中使用tryCatch指定集合的初始长度乘法和除法使用移位操作不要在循环用创建对象的引用不要将数组声明为public static final合理使用单例模式合理使用静态变量及时清除不再需要的会话使用for循环遍历实现RandomAccess接口的集合代码优化代码优化的目标:减少代码的体积提高代码的运行效率代码优化方式指定类和方法的fina原创 2020-07-08 12:56:19 · 1126 阅读 · 0 评论 -
Java中的&0xFF操作
&0xFF操作DataOutputStreamPrintStream二进制写入DataOutputStream位于java.io.FilterOutputStream.DataOutputStream与机器无关地写入各种类型的数据以及String对象的二进制形式,从高位开始写任何机器上任何DataInputStream都能够读取这些写入的数据所有的方法都以write开头.比如writeByte(), writeFloat()PrintStream位于java.io.FilterO原创 2020-07-02 13:04:01 · 1075 阅读 · 0 评论 -
Java中的泛型基本介绍
Java中的泛型泛型的基本概念泛型的基本概念泛型: 参数化类型参数:定义方法时有形参调用方法时传递实参参数化类型: 将类型由原来的具体的类型参数化,类似方法中的变量参数类型定义成参数形式, 可以称为类型形参在使用或者调用时传入具体的类型,可以称为类型实参泛型的本质是为了参数化类型在不创建新的类型的情况下,通过泛型指定的不同类型来控制...原创 2020-06-08 12:55:47 · 541 阅读 · 1 评论 -
Java动态代理机制及相关原理
Java动态代理机制及原理代理模式Java动态代理代理模式Java动态代理运用了设计模式中常用的代理模式代理模式:目的就是为其他对象提供一个代理用来控制对某个真实对象的访问代理类的作用:为委托类预处理消息过滤消息并转发消息进行消息被委托类执行后的后续处理通过代理层这一中间层,有效的控制对于真实委托类对象的直接访问,同时又可以实现自定义的控制策略,比如Spring中的A...原创 2020-05-20 12:28:54 · 453 阅读 · 0 评论 -
Java中的静态分派和动态分派原理
Java中的静态分派和动态分派方法调用方法解析Java方法分类静态分派方法调用在程序运行时,进行方法调用是最普遍,最频繁的操作方法调用不等于方法执行:方法调用阶段唯一的任务就是确定被调用的方法版本,即调用哪一个方法不涉及方法内部的具体运行过程Class文件的编译过程不包括传统编译中的连接步骤Class文件中的一切方法调用在Class文件里面存储的都是符号引用,而不是方法在在实...原创 2020-03-03 17:49:28 · 485 阅读 · 0 评论 -
Java中的extends和super
Java中的 ? extends T和 ? super T? 通配符类型<? extends T><? super T>? 通配符类型<? extends T>表示类型的上界:表示参数化类型的可以是T或者T的子类<? super T>表示类型的下界:表示参数化类型是这个类型的超类型,即父类型,直至Object<? e...原创 2020-01-15 12:47:44 · 730 阅读 · 0 评论 -
Java中的反射机制的深入理解
深入理解Java中的反射反射的概念反射的概念反射: Refelection,反射是Java的特征之一,允许运行中的Java程序获取自身信息,并可以操作类或者对象的内部属性通过反射,可以在运行时获得程序或者程序中的每一个类型的成员活成成员的信息程序中的对象一般都是在编译时就确定下来,Java反射机制可以动态地创建对象并且调用相关属性,这些对象的类型在编译时是未知的也就是说 ,可以通过反...原创 2019-12-24 21:29:49 · 4267 阅读 · 5 评论 -
Java中的幂等性
深入理解Java中的幂等性什么是幂等性幂等性的使用场景幂等和防重保证幂等性的情况设计幂等性服务保证幂等策略防重复提交策略乐观锁防重表分布式锁token令牌支付缓冲区幂等的不足什么是幂等性幂等性定义:一次和多次请求某一个资源对于资源本身应该具有同样的结果任意多次执行对资源本身所产生的影响均与一次执行的影响相同幂等性定义的几个重点:幂等不仅仅只是一次或者多次请求对资源没有副作用...原创 2019-12-18 18:19:44 · 8923 阅读 · 0 评论 -
Java中23种设计模式的详细介绍
Java开发中23种设计模式详细介绍设计模式介绍设计模式分类设计模式六大原则开闭原则(Open Close Principle)里氏代换原则设计模式介绍设计模式(Design Patterns):一套被反复使用,多数人知晓,经过分类编目,代码设计的总结使用设计模式是为了可重用代码,让代码更容易理解,保证代码可靠性项目中合理运用设计模式可以完美的解决很多问题,每种模式都有相应的原理...原创 2019-12-17 10:50:52 · 11068 阅读 · 24 评论 -
《阿里巴巴开发手册》读书笔记-设计规约
项目设计规约设计规约设计规约存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档有缺陷的底层数据结构容易导致系统风险上升,可扩展性下降重构的成本也会因历史数据的迁移和系统平滑过渡而陡然增加所以,存储方案和数据结构需要认真地进行设计和评审,生产环境提交执行后,需要进行double check评审内容包括:存储介质选型表结构设计能否满足技术方案存取性能和存储空间能否满...原创 2020-03-07 19:07:04 · 427 阅读 · 0 评论 -
《阿里巴巴开发手册》读书笔记-工程结构
Java工程结构应用分层二方库依赖规约服务器规约应用分层默认上层依赖下层,箭头关系表示直接依赖(比如开放接口可以依赖于Web层,也可以直接依赖于Service层)开放接口层: 可以直接封装Service方法暴露成RPC接口; 通过Web封装成接口; 进行网关安全控制,流量控制等终端显示层: 各个端的模板渲染并执行显示的层. 当前主要是velocity渲染,JS渲染,JSP渲染,移动端展...原创 2020-03-07 10:45:35 · 509 阅读 · 0 评论 -
《阿里巴巴开发手册》读书笔记-MySQL数据库
MySQL数据库建表规约建表规约表达是与否概念的字段,必须使用is_xxx命名,数据类型是unsigned tinyint(1-是,0-否)任何字段如果是非负数,必须是unsignedPOJO类中的任何布尔型变量,都不要加is前缀需要在< resultMap >设置从is_xxx到Xxx的映射关系数据库表示是与否的值,使用tinyint类型坚持is_ xxx的命名方式...原创 2020-03-06 22:49:35 · 473 阅读 · 0 评论 -
《阿里巴巴开发手册》读书笔记-安全规约
安全规约安全规约安全规约隶属于用户个人的页面或者功能必须进行权限控制校验防止没有做水平校验接可以随意访问,修改,删除别人的数据查看私信内容修改私人订单用户敏感数据禁止直接展示,必须对展示数据进行脱敏处理比如手机号隐藏中间4位,防止隐私泄露...原创 2020-03-05 21:48:59 · 444 阅读 · 0 评论 -
《阿里巴巴开发手册》读书笔记-单元测试
单元测试单元测试单元测试好的单元测试应该遵守AIR原则单元测试在线上运行时,应该感觉像空气(AIR)一样,并不存在,但在测试质量的保障上,确实非常关键的好的单元测试宏观上来说,具备以下的特点:自动化(A: Automatic)独立性(I: Independent)可重复(R: Repeatable)单元测试应该是全自动执行的,并且是非交互式的测试用例通常是被定期执...原创 2020-03-05 12:26:21 · 590 阅读 · 0 评论 -
《阿里巴巴开发手册》读书笔记-异常日志
Java异常日志异常处理日志规约异常处理Java类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch方式来处理:NullPointerExceptionIndexOutofBoundsException无法通过预检查的异常除外: 在解析字符串形式数字时,不得不通过catch NumberFormatException来实现if (obj...原创 2020-03-01 21:11:45 · 569 阅读 · 0 评论 -
《阿里巴巴开发手册》读书笔记-编程规约
Java编程规约命名风格命名风格类名使用UpperCamelCase风格方法名,参数名,成员变量,局部变量都统一使用lowerCamelcase风格常量命名全部大写,单词间用下划线隔开, 力求语义表达完整清楚,不要嫌名字长...原创 2020-02-16 21:27:13 · 3998 阅读 · 0 评论