【问题标题】:Maximum difference between two elements两个元素之间的最大差异
【发布时间】: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 个元素并且它们不是按递增顺序呢?)。跨度>

标签: c arrays algorithm


【解决方案1】:

就目前而言,您的算法是最优的,直到一个常数因子。

读取n 整数数组需要Ω(n)。你的算法是O(n),所以你很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2022-08-03
    • 2012-03-08
    • 2020-02-09
    • 2010-12-17
    相关资源
    最近更新 更多