《算法零基础》模拟
前言
模拟算法其实就是根据题目做,题目要求什么,就做什么。一些复杂的模拟题其实还是把一些简单的操作组合了一下,所以模拟题是最锻炼耐心的,也是训练编码能力的最好的暴力算法。
一、数据结构
对于模拟题而言,最关键的其实是数据结构,看到一个问题,选择合适的数据结构,然后根据问题来实现对应的功能。模拟题的常见数据结构主要就是:数组、字符串、矩阵、链表、二叉树 等等。
1、基于数组
利用数组的数据结构,根据题目要求,去实现算法,如:1920.基于排列构建数组、1389.按既定顺序创建目标数组、1603.设计停车系统、2149.按符号重排数组、2221.数组的三角和
2、基于字符串
利用字符串的数据结构,根据题目要求,去实现算法,如:2011.执行操作后的变量值、2744.最大字符串配对数目、LCP 17.速算机器人、537.复数乘法
3、基于链表
利用链表的数据结构,根据题目要求,去实现算法,如:2181.合并零之间的节点、1823.找出游戏的获胜者
4、基于矩阵
利用矩阵的数据结构,根据题目要求,去实现算法,如:2120.执行所有后缀指令、1252.奇数值单元格的数目、832.翻转图像、657.机器人能否返回原点、289.生命游戏、59.螺旋矩阵 II、885.螺旋矩阵 III
5、基于栈
利用栈的数据结构,如:1441.用栈操作构建数组
6、基于队列
利用队列的数据结构,如:1700.无法吃午餐的学生数量
二、算法技巧
模拟时一般会用到一些算法技巧,或者说混合算法,比如 排序、递归、迭代 等等。
1、排序
排序后,干一件事情,如:950.按递增顺序显示卡牌
2、递归
需要借助递归来实现,如:1688.比赛中的配对次数 、2169.得到 0 的操作数、258.各位相加
3、迭代
不断迭代求解,其实就是利用 while 循环来实现功能,如:1860.增长的内存泄露、258.各位相加