在java中添加两个大数组的元素

在java中添加两个大数组的元素,java,algorithm,modular,modular-arithmetic,Java,Algorithm,Modular,Modular Arithmetic,我必须想出一个算法,将两个大数组的元素相加(每个数组的大小是10)⁹ 整数的最大值为10⁹). 在java中声明两个大小为10的数组时⁹ 每次,我都会得到一个内存异常! 问题陈述:通过分析输入约束,您可以看到,如果使用两个整数数组实现解决方案,在最坏的情况下,您可以获得2*10^5*10^9数组访问。因此,这种方法行不通。如果您以某种方式解决了MLE错误,您几乎肯定会得到TLE 还有另一种方法……还有另一种选择:) 您只有200k个操作,也就是说,您只需要注意2*200k点(对于每个操作,您都有

我必须想出一个算法,将两个大数组的元素相加(每个数组的大小是10)⁹ 整数的最大值为10⁹). 在java中声明两个大小为10的数组时⁹ 每次,我都会得到一个内存异常!
问题陈述:

通过分析输入约束,您可以看到,如果使用两个整数数组实现解决方案,在最坏的情况下,您可以获得2*10^5*10^9数组访问。因此,这种方法行不通。如果您以某种方式解决了MLE错误,您几乎肯定会得到TLE

还有另一种方法……还有另一种选择:)

您只有200k个操作,也就是说,您只需要注意2*200k点(对于每个操作,您都有开始和结束索引)。 如果将操作保留在成对的排序数组中,其中ind是操作的开始索引或结束索引,值为正表示开始索引,值为负表示结束索引

回答查询可以通过循环该数组并保留一个sum变量来完成,您可以为遇到的每个ind、value对添加一个值

虽然这种方法稍微好一点,因为它可以在O(1)中为数组段添加值,但在最坏的情况下,查询仍然需要O(n)

所以,我想定制实现就是解决这个问题的方法

我知道的不多,但你可以查一下

基本上,段树将把所有的段存储在一个类似树的数据结构中,这意味着元素/段的访问和删除需要O(logn)时间。。。这很好。在这种情况下,段将是特定操作的范围(开始索引、结束索引)。树的每个节点还将保留一个值,您应该将该值添加到该段中

两个数组都有一个段树


因为我不知道我在说什么,你可以看看谁知道。

问题是-?你允许你的JVM有多少内存?我使用一个在线编译器,hackerrank上的一个。如果你给我们更多的背景资料,我们可能会告诉你你并不真的需要这么大的数组(如果是这样的话)
hackerrank
:如果你这样做了,请再次阅读问题陈述。提供问题本身的原始问题陈述的链接(无论如何,这是一个良好的实践)。(1)输入是如何给出的?您不需要存储至少一个数组,这取决于输入的方式