【发布时间】:2021-08-06 13:45:23
【问题描述】:
我尝试在 Hacker Rank 中解决 this 练习:
从 1 索引的零数组和操作列表开始,对于 每个操作为两个给定之间的每个数组元素添加一个值 指数,包括在内。完成所有操作后,返回 数组中的最大值。
示例:
n = 10
queries = [[1,5,3],[4,8,7],[6,9,1]]
查询解释如下:
a b k
1 5 3
4 8 7
6 9 1
在索引a 和b 之间添加k 的值:
index-> 1 2 3 4 5 6 7 8 9 10
[0,0,0, 0, 0,0,0,0,0, 0]
[3,3,3, 3, 3,0,0,0,0, 0]
[3,3,3,10,10,7,7,7,0, 0]
[3,3,3,10,10,8,8,8,1, 0]
最大值是在所有操作都执行完之后。
功能说明
在下面的编辑器中完成函数arrayManipulation。
arrayManipulation 有以下参数:
int n - 数组中的元素个数 int queries[q][3] - 一个二维查询数组,其中每个 queries[i] 包含三个整数 a、b 和 k。 返回
int - 结果数组中的最大值 输入格式
第一行包含两个以空格分隔的整数和 ,数组的大小和操作数。
接下来的每一行都包含三个以空格分隔的整数 、 、 、左索引、右索引和求和。
我使用了这段代码:
function arrayManipulation($n, $queries) {
for($i = 1; $i <= $n; $i++){
$a[$i] = 0;
}
foreach($queries as $index => $query){
$e = $query[0];
$p = $query[1];
$value = $query[2];
for($b = $e; $b <= $p; $b++){
$a[$b] += $value;
}
}
return max($a);
}
除了最大的测试用例(运行时错误)之外的所有工作,我该如何改进?
看起来很简单的任务,但我无法解决。
我使用的逻辑:
- 创建一个
array,索引 =$n(数组大小) - 开始到
foreach$queries并创建一个 tmp 变量:-
$e最小范围 -
$p最大范围 -
$value求和所需的值
-
- 使用
for-loop将总和值放入数组$a基数中以从最小值和最大值开始索引 - 返回
maxof$a
【问题讨论】:
-
您的第二个链接以 401(未经授权)错误告终。您能否在问题本身中包含相关信息而不是链接到外部资源?
-
是一个最大的测试用例,比如 20000 行,我不能在这里添加,因为会超过帖子的最大大小。
-
请分享更多细节。什么是“这个问题”?什么样的输入会破坏算法?您尝试过什么来解决问题?
-
运行时错误是问题
-
由于您的代码没有打印任何与“运行时错误”相关的内容,您需要分享更多详细信息