当前位置: 首页 > news >正文

二维数组如何更快地遍历

二维数组如何更快地遍历

有时候,我们会发现,自己的代码和别人的代码几乎一模一样,但运行时间差了很多,别人是 AC \text{AC} AC,你是 TLE \text{TLE} TLE,这是为什么呢?

一个可能的原因是数组的遍历方式。其实,在遍历数组是时,先行后列和先列后行是有区别的,下面我们来分析一下。

先行后列

#include<bits/stdc++.h>
using namespace std;
const int N=5000;
int a[N+5][N+5];
int main()
{int bg=clock();for(int o=1;o<=50;o++){for(int i=1;i<=N;i++){for(int j=1;j<=N;j++){a[i][j]=1;}}}int ed=clock();printf("%d",ed-bg);return 0;
}

在这里插入图片描述

先列后行

#include<bits/stdc++.h>
using namespace std;
const int N=5000;
int a[N+5][N+5];
int main()
{int bg=clock();for(int o=1;o<=50;o++){for(int j=1;j<=N;j++){for(int i=1;i<=N;i++){a[i][j]=1;}}}int ed=clock();printf("%dms",ed-bg);return 0;
}

在这里插入图片描述


上面两个代码的唯一差别是第一个代码是先枚举 i i i再枚举 j j j的,第二个代码是先枚举 j j j再枚举 i i i的。

这里用了循环 50 50 50次,这是为了放大差距,减小误差。

可以发现,先行后列的运行时间是 1000 m s 1000ms 1000ms多一点,先列后行的运行时间是 3000 m s 3000ms 3000ms多一点,所以先行后列是比先列后行更快一点的。

那么,当我们在卡常的时候,也可以用这种方法来加快运行时间,有时候真的能快很多。

http://www.lryc.cn/news/211904.html

相关文章:

  • 【网络安全】Seeker内网穿透追踪定位
  • Spring Boot 3系列之一(初始化项目)
  • 用python判断一个数是否为素数
  • FreeRTOS_信号量之二值信号量
  • 使用Gateway解决跨域问题时配置文件不生效的情况之一
  • 【火影手游】新版押镖护送高分攻略
  • 【JVM】类的声明周期(加载、连接、初始化)
  • 开源3D激光(视觉)SLAM算法汇总(持续更新)
  • 绕WAF手法总结
  • Linux mv命令:移动文件或改名
  • 在 Elasticsearch 中丰富你的 Elasticsearch 文档
  • 探营云栖大会:蚂蚁集团展出数字人全栈技术,三大AI“机器人”引关注
  • hdlbits系列verilog解答(8位宽移位寄存器)-24
  • LeetCode 275. H 指数 II
  • Android 优质的UI组件汇总
  • halcon roberts、 prewitt_amp、 sobel_amp、 edges_image、 laplace_of_gauss 对比
  • Vue2 跨域问题报错AxiosError net::ERR_FAILED、 Network Error、ERR_NETWORK
  • 第五章 I/O管理 四、I/O软件的层次结构
  • 云服务器安装Hbase
  • 黑豹程序员-架构师学习路线图-百科:PowerDesigner数据库建模的行业标准
  • Iterator 和 ListIterator 的区别(简要说明)
  • TypeScript - 函数 - 剩余参数
  • Python之前端
  • iOS iGameGuardian修改器检测方案
  • 显示一个文件夹下所有图片的直方图之和
  • 编程实例:操作简单的台球计时计费软件推荐,可以连接灯控硬件设备以及灯控器布线图编程
  • ThreadLocal 会出现内存泄漏吗?
  • Linux 下使用 Docker 安装 Redis
  • 协同网络入侵检测CIDS
  • (13)PC端自动化测试-C#微信接收消息并自动回复