Java “因黑客等级超时而终止”;数组操作“;

Java “因黑客等级超时而终止”;数组操作“;,java,Java,伙计们,我正在努力解决 那是 您将获得一个大小为的列表(1索引),初始化为零。您必须对列表执行操作,并输出列表中所有元素的最大最终值。对于每个操作,您都会得到三个整数,并且必须为从index到(包括index和index)的所有元素添加值 例如,考虑一个大小列表。初始列表为=[,],执行更新后,新列表为=[,]。在这里,我们为索引2和3之间的元素添加了值30。注意列表的索引从1开始 我的解决办法是 import java.io.*; 导入java.util.*; 导入java.text.*;

伙计们,我正在努力解决

那是

您将获得一个大小为的列表(1索引),初始化为零。您必须对列表执行操作,并输出列表中所有元素的最大最终值。对于每个操作,您都会得到三个整数,并且必须为从index到(包括index和index)的所有元素添加值

例如,考虑一个大小列表。初始列表为=[,],执行更新后,新列表为=[,]。在这里,我们为索引2和3之间的元素添加了值30。注意列表的索引从1开始

我的解决办法是

import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
公共类解决方案{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(系统输入);
int n=in.nextInt();
listarr=newarraylist(Collections.nCopies(n,newlong(0));
int m=in.nextInt();
对于(int a0=0;a0a
处记录值
+k
,在索引
b
处记录值
-k
,然后在每个查询处计算每个c的总值在
m
查询之后,只需计算数组的运行和(从左侧开始)。非常聪明,我很遗憾这不是我自己的想法

这是一个Scala解决方案,我通过了HackerRank的所有测试:

对象解决方案{
def main(参数:数组[字符串]){
val lines=scala.io.Source.stdin.getLines()
val数组(n,m)=行.next().split(“”).map(u.toInt)
val arr=数组ofDim[Int](n)

对于(行约束-


三,≤您得到的是“由于超时而终止”,因为您的解决方案太慢。顺便说一下-我看到您没有更改
arr
的大小,那么为什么要使用
ArrayList
而不是
long[]
?对象创建确实减慢了在线测试的此类程序的速度judges@Fureeish有什么建议可以让它更快吗?如果您的代码生成了正确的输出,但似乎太慢,您应该将问题发布在上,而不是StackOverflow。我首先将
ArrayList
替换为
long[]
也许还有
扫描器
使用更快的输入方法您的解决方案使用的是一种幼稚、暴力的方法。我现在想不出一个有效的解决方案,但基本上,这种类型的问题会让您以一种巧妙的方式记录/存储信息,从而防止您在每个页面上显式地遍历数据结构update@Fureeish这里真正的问题是解决方案的复杂性,而不是它的实现细节。算法本质上是缓慢的(二次的),不管它是如何实现的。