我有 C ++ 的编码经验。 最近,我一直在努力学习Java。
我正在网上法官那里练习一个简单的问题。 问题需要一个2x1000000维度的数组。 我宣布了一个数组:
int ara[][]=new int[1000000][2]
但是代码无法在3秒的时间限制内完成,并且在第一个测试用例中获得了超出时间限制的判决。
然后我就像这样切换尺寸:
int ara[][]=new int[2][1000000]
并相应地更改了代码,代码也被接受了。
经过一些实验后,我发现这是我的第一个代码超出时间限制的唯一原因。 int ara[][]=new int[1000000][2]
和int ara[][]=new int[2][1000000]
之间有什么区别?
为什么这些数组声明之间存在如此巨大的时间差异?
答案 0 :(得分:1)
分配内存需要时间。分配一个包含5个元素的数组并不需要花费与分配一个元素的5个数组相同的时间。对于每个分配,操作系统必须在页表中查找空闲块,分配它等等。
因此,在一个示例中,您只声明了2个数组,而在另一个示例中,您声明了1000000.这就是为什么一个比另一个快。