【发布时间】:2014-10-31 01:16:25
【问题描述】:
我正在准备近期的工作面试,并参加了实践技术测试。我在这些问题上做得很好,除了这个......
问题的前提是:给定一个数组,找出大小为“n”的数组的顺序子集的最大差值。示例
input = [6,8,4,5,3,1,7], n=3
[6,8,4] = the biggest diff = 4 (8-4)
[8,4,5] = the biggest diff = 4 (8-4)
[4,5,3] = 2
[5,3,1] = 4
[3,1,7] = 6
Final return from function:6
输入的限制类似于:数组的长度将小于 100k,n 将小于数组的长度。 该功能必须在 2 秒内完成。
我最初是用 python 编写的,但只收到了 3/6 个正确的测试用例,3 个由于时间限制而失败,所以我用 C 重写了,希望有更好的性能。
int i,j;
int maxdiff = 0;
int localmax,localmin,localdiff;
for (i=0;i<v_length-d+1;i++){
localmax = v[i];
localmin = v[i];
localdiff = 0;
for(j=0;j<d;j++){
if(v[j+i] > localmax){
localmax = v[j+i];
}
if(v[j+i] < localmin){
localmin = v[j+i];
}
}
localdiff = localmax-localmin;
if(localdiff > maxdiff){
maxdiff = localdiff;
}
}
return maxdiff;
我尝试运行它,但结果相同。 3/6 正确,3/6 由于运行时失败。
我在这里遗漏了什么吗?我意识到我循环遍历数组 ArraySize-n 中的每个值,我可以在脑海中以某种方式想象可以只循环一次数组,但似乎无法弄清楚如何。 有什么建议吗? 谢谢!
【问题讨论】:
标签: c arrays performance