2.2基本算法之递归和自调用函数_408算法大题--这样刷~

3712b58315f52a9be62d2cb715d07b48.png

知乎排版太差了,这里就给出内容的目录,详情请异步至Gitee查看md文件或下载PDF文件:

Mr翀/计算机软工408考研​gitee.com

内容目录如下:

0 前言


0.1 参考资料

  • AcWing算法基础
  • 王道数据结构
  • LeetCode
  • 剑指offer

0.2 阅读须知

  • 本算法大题专题将从如下几方面展开:
    • AcWing算法模板(大家也可以按照王道书上的模板来记,这里就不列举出王道模板)
    • 408真题
    • LeetCode + 剑指offer算法题
  • 阅读完本专题并不会对你的算法大题产生很大的短时间突破(非标题党),切勿扰乱个人复习的主体计划
  • 本专题旨在提供算法大题上的思想引导让你在考场上能够有所思路能够动笔,至于押题什么的一概不会涉及,好的408选手是长时间的沉淀和积累而来的,不是投机倒把而来,请摆正心态
  • 本专题适合刷题量不多,做算法题没什么思路的童鞋!刷题或竞赛大佬请移步!

1 算法大题特点


408中算法大题,偏向对基本数据结构(线性表和树)的考察,但是图也有可能会考到。出题形式多样,基本都是在一个设定的背景或问题下,通过使用常见的算法(排序算法、查找算法、双指针、树的遍历、DFS、BFS)来解题。 注意:算法题基本都是在现有的算法模板下按照题目的意思进行变形得到的
  • 小试牛刀
题目:

279d12bfb8c1fbe7ba478d2ff18e2ecc.png
408真题
读题:从题目中不难看出这题就是对 二叉树的中序遍历的考察,但是题目中额外加了 通过括号来反映操作符的计算次序这一个条件,这就让本题从模板题上升了一个高度,不仅要求你能到记住二叉树的中序遍历的模板,还要能够通过题目的额外添加的条件对现有算法模板进行变形。 刷算法的重要性:刷过LeetCode/剑指offer的小伙伴不难发现,这种题目的风格非常接近 简单/中等类型的题目,如果考前有针对性的去看看408常考内容对应的LeetCode的题目将对我们大有脾益! 解题:这是2017年408真题41题,想必大家都差不多已经做过,这里就简单说一下这一题如何下手。 对于树的先序/中序/后序问题尽量写成递归函数,如果写非递归你会发现这一题代码量和实现难度都有很大的提升,在考试这么紧张的环境下,很难写出非递归代码实现
理清递归函数思路:(回想:递归算法怎么写?)
特判条件:结点为null,根结点
找公式/主要思想:中序遍历递归模板,左子树前加"(",右子树后加")"
  • 伪代码实现:
void BtreeToE(BTree * root){
  BtreeToExp(root,1);
 }
 ​
 void BtreeToExp(BTree * root, int deep){
  if( root == NULL) return;
  else if(root->left = = NULL && root->right = = NULL)
   printf(“( %d”,root->data); //叶子结点直接输出
  else{
  //deep是为了保证根节点操作数层不被包裹括号
  if(deep>1) printf(“(”);
  BtreeToExp(root->left,deep+1);
  printf(“%s”,root->data);
  BtreeToExp(root->right,deep+1);
  if(deep>1) printf(“)”);
    }
 }

2 主要内容


2.1 线性表(双指针、环形链表)

2.1.1 模板掌握

  • 排序模板:Acwing模板
  • 查找模板:Acwing模板

2.1.2 常用思路掌握

  • 双指针
  • 反转链表
  • Merge链表
  • 找超过一半的数(众数)
  • 前缀和
  • 链表公共点
  • 快慢指针法

2.1.3 KMP了解

  • KMP:Acwing模板

2.2 栈和队列(滑动窗口)

2.2.1 常用思路掌握

  • 两个栈实现队列
  • O(1)找栈中最小值min
  • 滑动窗口

2.3 二叉树(递归)

2.3.1 二叉树的遍历掌握

  • 二叉树递归
  • 先序遍历找路径
  • 二叉搜索树
  • 二叉树的高度
  • 二叉搜索树递归
  • 完全二叉树遍历

2.4 图(BFS、DFS)

2.4.1常用思路了解

  • DFS

2.4.2 图的应用了解(补充知识,时间充裕可以记一记)

  • Dijkstra:Acwing模板
  • Floyd:Acwing模板
  • Prim:Acwing模板
  • Kruskal:Acwing模板

3 总结


  • 408算法题的重心还是在线性表和二叉树上
  • 自己在写伪代码实现的时候一定一定要写上清楚详细的注释~~(这里千万不要学我)
  • 本专题选取的都是题目比较简单,内容也都是对现有基础算法的变形考察,还是比较接近于408真题的风格的。建议如果刷算法比较少的可以仔细看看这些题的详细题解(可以直接点击题目链接到LeetCode上去查看更加详细的题解解答)
  • 不喜勿喷,大佬请移步!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值