算法竞赛里的(堆)数组

算法竞赛里的创建(堆与栈)数组

最近对算法着迷,准备先打打算法小比赛,有时我会分享、加深某些知识印象。


以DevCpp为例
算法竞赛里经常会使用到数组,比如动态规划类的题目,动辄需要几万几十万长度的数组作为单元格存放数据。如果我只是在主函数里 int arr[100000];那么该数组会在"栈"上创建存放,而"栈"的空间大小不足以放这么大的数组。以DEVCPP为例,我的测试是最多放5万-6万的int数组,"栈"就爆炸了,更别提递归。

这时候我们就需要把数组创建在堆
堆,比栈大的多得多,完全可以容纳超长数组。堆和栈的区别不多说,创建堆数组有2种方法:

1.使用new申请创建。
new

inw* arr = new int[10000000];

2.借助static定义全局数组

//#include<iostream>
//using namespace std;
static int way[10000001][10000001];
static int v[10000001];
static int arr[10000001];

最后是成果展示 3个千万长度的数组可以运行程序
在这里插入图片描述

最后,如果读者发现上文有误,请告知我,万谢,我还需要继续学习。

### 数组最大容量限制 在算法竞赛环境中,数组的最大容量通常受到多种因素的影响。具体而言,在线评测系统的内存限制决定了程序可以使用的内存量,进而影响到数组大小。 对于大多数在线评测平台来说,常见的内存限制范围是从64MB至512MB不等[^2]。假设每种数据类型的变量占用的空间如下: - 整数 (int): 一般占4字节 - 长整型 (long long int 或 long, C++/C#): 占8字节 - 浮点数 (float/double): 分别占据4字节和8字节 因此,如果给定的题目有特定的内存上限K,则可以根据上述信息计算出不同数据类型下允许创建的最大数组尺寸N: \[ N = \frac{Memory\ Limit}{Size\ of\ Data\ Type} \] 例如,当内存限制为256 MB且使用的是32位整数(int),那么理论上可分配的最大连续空间大约是\( 256 * 1024 * 1024 / 4 = 67,108,864 \)个元素。 然而值得注意的是实际应用中还需考虑其他销如栈帧、指针以及其他动态分配的对象所消耗的额外资源。此外,某些编译器可能会有不同的默认设置或优化选项也会影响最终的结果。 为了确保代码能在规定时间内完成执行并满足性能需求,建议参赛者们不仅要关注时间复杂度还要重视空间效率的选择适当的数据结构来解决问题[^3]。 ```cpp // 示例:定义一个尽可能大的静态数组(注意这取决于具体的OJ平台) const int MAX_SIZE = 1e6; // 假设这是一个合理的估计值 int largeArray[MAX_SIZE]; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值