小编典典

数组中连续元素的最大乘积

algorithm

我在现场采访中被问到这个算法问题。由于不要求我签署NDA,因此将其张贴在此处以寻求答案。

鉴于数组 REAL 数字,不包含0,发现产生最大的产品连续元素。该算法应在线性时间内运行

我考虑了以下方法:使用两个数组。第一个是使用DP思想记录当前的最大 绝对值
乘积,第二个数组是记录到目前为止满足的负元素数量。最终结果应该是最大的最大绝对值,并且负数的数量应为偶数。

我以为我的方法可以用,但是在编码过程中被打断了,说它不能用。请让我知道以上方法缺少的内容。


阅读 284

收藏
2020-07-28

共1个答案

小编典典

该算法的确为O(n)。迭代数组时,请使用一个变量存储到目前为止找到的最大值,使用一个变量存储以a [i]结尾的子数组的最大值,并使用另一个变量存储以a
[i]结尾的最小值负值。

float find_maximum(float arr[], int n) {
    if (n <= 0) return NAN;

    float max_at = arr[0];  // Maximum value that ends at arr[i]
    float min_at = arr[0];  // Minimum value that ends at arr[i]
    float max_value = max_at;

    for (int i = 1; i < n; i++) {
        float prev_max_at = max_at, prev_min_at = min_at;
        max_at = max(arr[i], arr[i] * prev_min_at, arr[i] * prev_max_at);
        min_at = min(arr[i], arr[i] * prev_min_at, arr[i] * prev_max_at);
        max_value = max(max_value, max_at);
    }
    return max_value;
}
2020-07-28