【发布时间】:2020-11-15 00:51:13
【问题描述】:
long arrayManipulation(int n, int queries_rows, int queries_columns, int** queries)
{
long num, a, b, maxnum = INT_MIN;
long* arrptr = calloc(n, sizeof(long));
for(int i = 0;i<(queries_rows);i++)
{
num = queries[i][2];
if(num==0)
{
continue;
}
printf("%ld ", num);
a = queries[i][0];
b = queries[i][1];
for(long i = a-1;i<b;i++)
{
arrptr[i] += num;
if(maxnum<(arrptr[i]))
{
maxnum = arrptr[i];
}
}
}
free(arrptr);
return maxnum;
}
我必须优化这个程序,以便它可以在更短的时间内执行,你能帮忙吗??
这个程序应该用 0 初始化一个大小为 n(函数参数)的数组(让我们调用数组 arr)
那么会有表单查询a b k1 2 34 5 6
然后在数组 arr 中我们在限制 a 和 b 之间添加 k 然后返回 arr 的最大值
示例 样本输入
5 3
1 2 100
2 5 100
3 4 100
样本输出
200
解释
第一次更新后列表将是 100 100 0 0 0。
第二次更新后列表将是 100 200 100 100 100。
第三次更新后列表将是 100 200 200 200 100。
返回的答案将是 200。
【问题讨论】:
-
@4386427 我纠正了它,现在唯一的问题是我必须减少时间,int* arrptr 的错误只是一个打字错误,谢谢
-
帮自己(以及阅读您代码的每个人)一个忙,并在通过指针使用值时使用数组索引,例如:
num = *(*(queries+i)+2);相当于num = queries[i][2]; -
@pmg 我们可以使用这样的数组指针吗?很抱歉问了这样一个愚蠢的问题??????????。
-
是的,您可以使用这样的指针。编译后的代码很可能与您使用的任何语法相同。您可能想阅读comp.lang.c faq 的第 6 部分。
-
可能不是“超出时间限制”的原因,但是您可以直接从输入进行更新而不将所有内容放入数组中(只保留数据数组)吗?