十二。labuladong公众号总结

一,算法刷题的框架思维

1.数据结构基本操作:查增删改,遍历

遍历:线性:for/while遍历(数组,链表),非线性:递归遍历(链表,二叉树)

2.二叉树是最容易培养框架思维的,而且大部分算法技巧,本质上都是树的遍历问题

  所以二叉树的遍历非常重要,尤其递归遍历(回溯,动规,分治,只要涉及到递归的问题,都是树的遍历问题)

3.回溯算法就是一个N叉树的前后序遍历问题,没有例外

二,链表

1.对于链表的题目,双指针法运用很多

2.链表的两个技巧:双指针法,虚拟头节点

3.链表的递归操作也很多。比如遍历就可以递归遍历

4.N23合并k个有序链表。

创建优先级队列的时候,传入2个参数:队列大小,比较器。(构造的时候传入初始容量可以提高效率)

5.在快慢指针法中,fast=null && fast.next != null  ,否则会发生空指针异常

6.算法题中的排序:Arrays.sort(),Collections.sort(),优先级队列

7.回文相关

解决此问题的核心是:双指针

反转字符串:reverse,双指针法  判读回文串:reverse,双指针法

(1)N125 判读回文串

(2)N5最长回文子串***  有难度

(3)N516最长回文子序列***  要用到动态规划

(4)N234回文链表***  可以做一下,用到了链表的递归遍历

三.LRU

1.N146

(1)LinkedHashMap像是一个可以随机存取的双端队列

2.LFU

这个得熟悉LinkedHashMap源码,得熟悉HashMap源码

 3.LinkedHashMap和TreeMap可以看做是一个双端队列,获取队头元素要用迭代器的next方法

 4.N155最小栈

***判断两个变量是否相等时,一定要想一想是用==还是equals

 设计循环队列和设计双端循环队列看看

4.单调栈,单调队列

栈的存取顺序相反,队列的存取顺序一致 

四。二叉树

1.递归算法的关键是要明确这个函数的定义。写二叉树的算法题,都是基于递归框架的,我们先要搞清楚root节点它自己要做什么,然后根据题意选择使用前序,中序,后序的递归框架。

2.

五。回溯backtrack(第二次做随想录题目的总结)

1.回溯是一种搜索方式,通过dfs实现。回溯就是在遍历一棵决策树(N叉树)。因为回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度;递归的深度,构成的树的深度。for循环,横向遍历;递归,纵向遍历

2.回溯需要思考3个问题:路径,选择列表,结束条件

(递归需要思考三个问题:定义,选择列表,递归表达式(递归逻辑,递归实现))

3.回溯算法框架:

4.回溯算法就是在做选择

每个节点有两个属性:路径(所做的选择),选择列表

做的选择就是路径

5.(1)ArrayList(Collection c)构造方法

6.回溯可以解决:

题型一:排列,组合,子集问题

题型二:Flood Fill

题型三:字符串中的回溯问题

题型四:游戏问题

 7.没做出来的题

8.全局变量可以放在参数里面,也可以放在外面

 9.树层去重,需要对数组排序

 10.遍历到叶子节点就结束了,其实真正的是遍历到叶子结点的下一层

11.去重:同一树枝去重,同一树层去重

同一树层去重需要先排序

12.组合和子集都不能回头,正因为不会头,所以不用建userd数组

排列可以回头

13.回溯最关键的是要把决策树画出来

14.N皇后问题

(1)字符默认为:'u0000'(即空字符)

原文地址:https://www.cnblogs.com/midiyu/p/15416803.html