【发布时间】:2013-03-27 20:29:41
【问题描述】:
给定一个整数数组,我必须找出任何两个元素之间的最大差异,以便在数组中较小的数字之后出现较大的数字。我使用了一种简单的方法,并用遇到的最小数字来计算差异所以远通过跟踪两件事来实现
1.最大差异
2.目前访问的最少人数。
int min_element=arr[0];
int diff=arr[1]-arr[0];
for(i=1;i<n;i++)
{
if(arr[i]-min_element>diff)
diff=arr[i]-min_element;
if(arr[i]<min_element)
min_element=arr[i];
}
return diff;
有没有更好的方法来解决这个问题?
【问题讨论】:
-
由于您有 工作 代码并且只是在寻找反馈,因此您可能希望将此问题考虑为 code review。
-
你所拥有的一切都很好。您可以使用各种技巧以恒定因子加速它,但只能通过恒定因子(它通常需要 Ω(n) 时间,您的实现可以实现)。除非这对您的程序来说是一个重大的性能瓶颈,否则请确保您的编译器已打开优化并继续处理下一个问题。
-
吹毛求疵:您不会检查
arr[1]是否大于arr[0]。只要数据不是按反向(递减)顺序排序的,它就应该自行排序,但您需要考虑边界条件(如果只有 2 个元素并且它们不是按递增顺序呢?)。跨度>