我对R很陌生,并且在Hackerrank中练习了一些问题。这是一个这样的问题。我编写的代码正在解决许多测试用例,但不是全部。但是,失败的测试用例对我不可见。它们主要是由于性能问题而失败。下面是问题陈述:
问题:
您将获得一个大小为N的列表,该列表以零初始化。您必须在列表上执行M个操作,并输出列表中所有N个元素的最终值的最大值。对于每个运算,您都会得到三个整数a,b和k。必须将值k添加到索引a到b(包括两端)的所有元素中。
输入格式:
第一行将包含两个整数N和M,并用一个空格隔开。 接下来的M行将分别包含三个整数a,b和k,每个空格均不分隔。 列表中的数字从1到N。
输出格式:
单独的一行中的一个整数,其中包含更新列表中的最大值。
约束:
3≤N≤10 ^ 7
1≤M≤2 * 10 ^ 5
1≤a≤b≤N
0≤k≤10 ^ 9
示例输入
:5 3
1 2 100
2 5 100
3 4 100
示例输出:
200
说明:
第一次更新后的列表将是100 100 0 0 0。
第二次更新后的列表将为100200100100100。
第三次更新后的列表将是100200200200100。
因此所需的答案将是200。
这是我的代码:
f1 <- file("stdin")
open(f1)
inp1 = readLines(f1, n = 1, warn = FALSE)
str = strsplit(inp1, " ")[[1]]
n = as.numeric(str[1])
o = as.numeric(str[2])
arr = c()
arr[1:n] = 0
#for(x in 1:n){
# arr = append(arr, 0)
#}
for(i in 1:o){
inp1 = readLines(f1, n = 1, warn = FALSE)
spl = strsplit(inp1, " ")[[1]]
a = as.numeric(spl[1])
b = as.numeric(spl[2])
k = as.numeric(spl[3])
arr[a:b] = arr[a:b] + k
}
close(f1)
cat(arr[which.max(arr)])
如何对其进行微调?我还尝试过使用line = readLines(f1, n = -1, warn = FALSE)
一次读取所有输入行,然后一个接一个地遍历它们,但这会进一步降低性能。