知识点

  1. DFS深度优先算法可以解决的问题,我们其实也可以使用Union-Find算法来进行解决。
  2. 将二维坐标映射到一维常用方法:二维坐标(x,y)可以转换成x * n + y这个数(m是棋盘的行数,n是棋盘的列数)
  3. 上下左右搜索:可以使用一个方向数组int[][] d = new int[][]{{1,0}, {0,1}, {0,-1}, {-1,0}};

LeetCode算法题

  1. LeetCode算法题
    1. 130.【被环绕的区域】
      解题思路:边和角上的0肯定不被X完全包围不需要替换,并且和边、角上0相连通的0肯定不需要替换。因此,思路1:使用for遍历棋盘的边,使用DFS,将边、角的0和与边、角的0相连通的0替换为特殊字符例如#;然后遍历整个棋盘,替换剩下的0为X;最后,遍历棋盘,将#还原为0,算法结束。思路2:使用Union-Find算法实现,该方法比较复杂,效率不如DFS,仅做拔高。
  2. 指定算法题:
    1. 判定合法算式:给你一个数组equations,装着若干字符串表示的算式。每个算式equations[i]长度都是 4,而且只有这两种情况:a==b或者a!=b,其中a,b可以是任意小写字母。你写一个算法,如果equations中所有算式都不会互相冲突,返回 true,否则返回 false。
      解题思路:我们可以将原问题拆解成图的动态连通性问题,==关系就是建立动态连通性,!=关系就是破坏连通性,则该题真实目的为,如果!=没有破坏==建立的动态连通性,则返回true,否则返回false。
  3. LRU算法的实现
    1. LRU算法是什么
      LRU全名Least Recently Used,最近最少使用原则。LRU算法是一种缓存淘汰算法
      计算机中缓存的存储资源有限,如果缓存用尽就必须清除部分内容,因此我们需要使用缓存淘汰算法来决定哪些数据要保存,哪些数据要淘汰。
    2. LeetCode题目
      1. 146.【LRU缓存机制】
        解题思路:
        要满足put和get方法时间复杂度为O(1),则cache的数据结构必须满足:1、cache中的元素必须有序,顺序为时序,用以区分最近使用的和没有使用的;2、cache必须可以快速查找到某个元素;3、每次访问cache中的某个key,需要将这个元素变为最近使用的。
        哈希表查找快,但是数据无固定顺序;链表有顺序之分,插入删除快,但是查找慢,因此我们使用两者的结合哈希链表。LRU缓存算法的核心数据结构就是哈希链表,双向链表和哈希表的结合体