【问题标题】:array amplitude through a php function通过php函数的数组幅度
【发布时间】:2011-09-29 21:25:57
【问题描述】:

我有这个问题,我需要解决,请帮助。 给出了一个由 N 个整数组成的非空零索引数组 A。该数组的幅度定义为其两个元素之间的最大可能差异,即:幅度(A) = max{ A[P] - A[Q] : 0 ≤ P, Q

写一个函数

函数幅度($A);

给定一个由 N 个整数组成的非空零索引数组 A,返回其幅度。

假设:

N 是 [1..1,000,000] 范围内的整数; 数组 A 的每个元素都是 [0..5,000,000] 范围内的整数。 例如,给定数组 A 使得

A[0] = 10 A[1] = 2 A[2] = 44 A[3] = 15 A[4] = 39 A[5] = 20 该函数应返回 42。

复杂性:

预期的最坏情况时间复杂度为 O(N); 预期的最坏情况空间复杂度为 O(1),超出输入存储(不计算输入参数所需的存储)。 可以修改输入数组的元素。

【问题讨论】:

  • 嗯,是的。如果你不能处理这个级别的问题......
  • function amplitude($A) { return "its amplitude"; } ;-)
  • 即使这被标记为作业,请将您的问题提炼到您遇到问题的部分,而不是整个问题。
  • 你不会在这里找到明确的家庭作业答案。

标签: php arrays


【解决方案1】:

您只需遍历数组。你从一个最大值和一个最小值开始。 比,对于每个元素,如果它大于最大值,则更新最大值,如果它小于最小值,则更新最小值。最后,您只需计算计算的最大值和最小值之间的差异。

这将只需要一次遍历数组,所以它是 O(N)

function amplitude(array $A) {
    return max($A) - min($A);
}

【讨论】:

  • 你的算法是正确的,但是“这将只需要遍历数组一次,所以它是 O(N)”是不正确的。它可以遍历数组 1000 次,仍然是 O(N)。使它成为 O(N) 的原因是它访问数组的每个元素的次数相同。
  • 这绝对不是真正的伊格纳西奥。 O(N) 意味着时间复杂度随着算法的输入线性增长。如果数组增加 1,则执行的步数也会增加 1。
  • 好吧,如果你想更正确,那就请正确。 O(N) 意味着执行时间与 N 成正比。您可以将每个元素解析不同的时间,只要该数字是有限的,因为 N 趋于无穷大。
  • 还不错,丹 :)。我的措辞确实不够准确。
  • 我在回复 Ignacio Vazquez-Abrams :) 。但是,是的,你也有点错了:) 步骤的数量不需要与元素的数量完全相同。因为每个元素可以有多个步骤。重要的是,对元素的操作是在有限的时间内进行的,并且该数量与 N 无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2021-05-18
  • 2012-05-16
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多