Data structure and algorithm-Two

发布时间 2023-08-28 22:50:59作者: Miku831
  1. B树
     

     

       

     


     





























  2.  

     




     

     

     

     

     

     

       扩容

     

     

     


     

     

     

     

     

     

     

  3.  找出不含重复字符的最长字串的长度

  4.  

    字母异位词分组
     
     

     优化
    用一个长度26的整数数组来标识

     ArrayKey的构造方法

     




     

  5.  

    判断是否存在重复元素

     

     借鉴HashSet后的小优化版

     put 自带一个返回值,返回的是添加前原位置的元素,若原位置为空,则返回null 



  6. 添加,若遇到重复元素,则在集合中删除,最后集合中只剩下没有重复的那个元素

     


    效率不高
    异或(异为1,同为0) 

     

    所有数字进行异或,相同的数字异或后为0,而0与原数字异或后的结果是数字本身

  7.  

    找出段落中出现次数最多的单词

     

     

     利用流找到最大频率

     



    λ表达式缺点:运行效率不高


    正则表达式效率也不高

     

     



     

  8.  排序算法

     

     

     





    选择排序
     

     

     

     3.堆排序

     



    4.插入排序

     

     

       

    5.希尔排序
    先分组,组内再插入排序
    每次移动范围大

     


     



     



    6.归并排序

      

     

     

     

     

    递归 自上而下

    非递归  自下而上

     


    6.归 并+插入
    归并 分到一定就调用插入排序

     

     

     


    7.快速排序,基于比较的最快的排序算法


     a.单边循环

     

     遇到符合条件 则停,两个都遇到则交换位置 

     

     b.双边循环,双向奔赴

     i找到与基准点相等的时候不停,故有重复元素时会偏右 

    j  i 代码顺序不能交换

     



    如何处理想等情况?

     不同:j为基准点索引最终值

     

     


    8.计数排序



    9.桶排序

     



    10.基数排序(按位排序)

     

    高位往低位排 msd
    11.Java中的排序算法
    7-13 JDK 

     14-20JDK

     

     

  9.  

    数组相对排序 

     

     

      

  10.  

    按照频率将数组升序排序

     

     

  11.  

    最大间距

     

     

     大范围数时,用桶排序的话,可能数组过大
    基数排序 

     

     

     速度相比桶排序较低

     改进桶排序


    防止除0异常

     再优化
     有空桶时,可以保证桶间间距大于桶内元素间距

     

     

  12.  


     

     

     

     

      

     

     

     

      空间更节省

     

     深度优先遍历

     广度优先




    拓扑排序

     

     

     检测环

     拓扑排序+深度优先

     状态1用在 环检测

      

  13.  

    迪克斯特拉  单源最短路径算法

     
    改进

     

     

            
    缺点:不能处理负权重

  14. 贝尔曼算法
    可以处理负边 ,但不能处理负环,需手动检测

  15.  

    弗洛伊德多源最短路径算法

     

     .....

  16.  

    最小生成树
    Prim算法(以顶点为核心)
      和迪克斯特拉算法很相似

     克鲁斯卡尔算法(以边为核心)

    从小到大找边,看边的两点是否未被联通

     不相交集合类

     最坏情况


    优化

     find优化,路径压缩


    优化union
    找到更合适的老大

     

     

     


  17. 贪心算法
    寻找最优解

      

  18.  

    零钱兑换 

     递归

     

     利用贪心算法
    可能得到错误结果
     

  19.  

    霍夫曼编码
      

     

     统计各个字符的出现频次

     构造树 

     

     


     编码 

     解码
     

  20.  

    活动选择 

     贪心算法
     优先选择最先结束的活动
     ’ 

  21.  

    分数背包问题

      



  22.  

    动态规划 解决斐波那契

      

  23.  

    贝尔曼算法求最短路径

     

     

     

  24.  

    路径问题

     改为一维数组表示
    原值为上次继承到的值,与左值相加即为新值

  25.  

     

    背包问题

      

     

     

     优化,二维数组降为一维数组 

  26.  

    完全背包问题
    每件物品无限多
     

     

      

     

     降维,为什么j的遍历顺序不用改变

  27.  

    零钱兑换 动态规划
     

     

     

     降维
     

  28.  

    零钱兑换 所有兑法
     

     

     

  29.  

    钢条切割问题
     

     

     

  30.  

    最长公共子串 动态规划
     

     

  31.  

    最长公共子序列
     

     

     

     上面和左面中取大的

  32.  

    两个字符串的删除操作,删到相同
      

     

     字符串1长度 + 字符串2长度 - 2*公共子序列长度 == 删除的长度 

  33.  

    最长递增子序列
     

     

     

  34.  

    不同的二叉搜索树


    卡特兰数

     

     

  35.  

    利用卡特兰数 求出战序列有多少种 

  36.  

    括号 生成

  37.  

    抢钱

     

  38.  

    旅行商问题

     

     

      

     

     

  39.  

    分治

     

  40.  

    快速选择算法 

  41.  

    求数组中第K大的元素


    利用快速选择算法  O(n)

     

     

  42.  数组中位数
     

     

     

     

     

  43.  快速幂

     

     改进

     

     改进0的情况


    改进负数次幂的情况



    改进极限负值(Integer最小值)

     换成long就行  

    另一种判断奇偶的方法
    与1按位与,通过判断最后一位

  44.  

    平方根整数部分
     

     

     

     缺陷:大数容易越界
     改进:改成除法

     

     



  45. 至少有k个重复字符的最长子串

      

    逐步去除出现频率不符合要求的字符

     

     



  46. 回溯

     

     

  47.  

    全排列II
     去除重复的排列
    剪枝

     

  48.  

    组合

     

     剪枝优化
    把多余的显然之后都不符合条件剪掉

     

  49. 组合总和,类似零钱兑换


    剪枝,优化

     

     

  50. 组合总和II
    只能用一次,且不允许有重复

     

     

  51.  

    组合总和III
    和组合比较类似


    更有效的剪枝

  52.  

    N皇后
     

     

    i为正在处理第几行 
    n为数组的维度,也是皇后的个数
    一行一行尝试放皇后,每一行中对不同列进行尝试

     若递归失败,没地方可放,则恢复到递归之前的状态,

  53.  

    解数独 

     

     

     

     

     

     

     






  54.