一、基本理解
顾名思义,就是题目要求做什么,代码中就跟着做就可以。
二、题目练习
1252. 奇数值单元格的数目
根据题目要求列出如下代码。需要注意填充列和行的时候注意下标。
int oddCells(int m, int n, int** indices, int indicesSize, int* indicesColSize) {int mat[60][60];memset(mat, 0, sizeof(mat));for(int i = 0; i < indicesSize; ++i) {int r = indices[i][0];int c = indices[i][1];//填充列for(int j = 0; j < m; ++j) {mat[j][c]++;}//填充行for(int j = 0; j < n; ++j) {mat[r][j]++;}}int ret = 0;for(int i = 0; i < m; ++i) {for(int j = 0; j < n; ++j) {if(mat[i][j] % 2 == 1) {ret++;}}}return ret;
}
以下的题目都是一些模拟的题目,可以按需练习。
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. 各位相加