求最大值-R

时间:2018-06-29 10:50:08

标签: r

我对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)一次读取所有输入行,然后一个接一个地遍历它们,但这会进一步降低性能。

0 个答案:

没有答案