【算法集训】基础算法:模拟

本文介绍了编程中的题目练习,涵盖数组、矩阵、链表、字符串、栈和队列等数据结构,以及排序、递归和迭代等算法技巧在解决实际问题中的应用。通过1252题为例,展示了如何使用代码实现奇数值单元格计数。
摘要由CSDN通过智能技术生成

一、基本理解

顾名思义,就是题目要求做什么,代码中就跟着做就可以。

二、题目练习

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. 螺旋矩阵 II885. 螺旋矩阵 III

5、基于栈

利用栈的数据结构,如:1441. 用栈操作构建数组

6、基于队列

利用队列的数据结构,如:1700. 无法吃午餐的学生数量

二、算法技巧

模拟时一般会用到一些算法技巧,或者说混合算法,比如 排序、递归、迭代 等等。

1、排序

排序后,干一件事情,如:950. 按递增顺序显示卡牌

2、递归

需要借助递归来实现,如:1688. 比赛中的配对次数2169. 得到 0 的操作数258. 各位相加

3、迭代

不断迭代求解,其实就是利用 while 循环来实现功能,如:1860. 增长的内存泄露258. 各位相加

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子琦啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值