【问题标题】:How to optimize this for loop? [closed]如何优化这个for循环? [关闭]
【发布时间】:2021-02-26 14:15:48
【问题描述】:
class MaximumDiffrence 
{ 
    
    int maxDiff(int arr[], int arr_size) 
    { 
        int max_diff = arr[1] - arr[0]; 
        int i, j; 
        for (i = 0; i < arr_size; i++) 
        { 
            for (j = i + 1; j < arr_size; j++) 
            { 
                if (arr[j] - arr[i] > max_diff) 
                    max_diff = arr[j] - arr[i]; 
            } 
        } 
        return max_diff; 
    } 

}

要找到最大差异,除了对一个非常大的列表使用两个 for 循环之外,还有其他方法吗?请帮我优化一下。谢谢。

【问题讨论】:

  • 用一个for循环,找到最高和最低的元素。它们之间的区别是最大的区别。
  • 您能否详细说明并帮助我编写代码?谢谢。 @khelwood
  • 请注意,提出此问题的方式存在问题。如果最大数非常大而最小数非常负,那么它们之间的差值表示为int 将是负数。结果必须是long。

标签: java for-loop nested


【解决方案1】:

使用一个 for 循环,您可以找到最高和最低的元素。它们之间的区别是最大的区别。

class MaximumDifference { 

    int maxDiff(int arr[], int arr_size) {
        int lowest = arr[0];
        int highest = arr[0];
        for (int i = 1; i < arr_size; ++i) {
             int value = arr[i];
             if (value < lowest) {
                 lowest = value;
             }
             if (value > highest) {
                 highest = value;
             }
        }
        return highest - lowest;
    } 
}

陷阱:

  • 如果arr.length我们为零,或者如果arr.length小于arr_size,这将出错。在这些情况下,我不知道您想要返回什么。
  • 如果最高元素和最低元素之间的差异足够大(例如,如果最高元素是 Integer.MAX_VALUE 而最低元素是负数),这可能会溢出,并且会返回一个负数。这可以通过将返回类型更改为 long 来缓解,正如 Stephen C 在评论中所建议的那样。

【讨论】:

  • 感谢您的及时答复!它奏效了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多