我在现场采访中被问到这个算法问题。由于不要求我签署NDA,因此将其张贴在此处以寻求答案。
鉴于数组 REAL 数字,不包含0,发现产生最大的产品连续元素。该算法应在线性时间内运行
我考虑了以下方法:使用两个数组。第一个是使用DP思想记录当前的最大 绝对值 乘积,第二个数组是记录到目前为止满足的负元素数量。最终结果应该是最大的最大绝对值,并且负数的数量应为偶数。
我以为我的方法可以用,但是在编码过程中被打断了,说它不能用。请让我知道以上方法缺少的内容。
该算法的确为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; }