The max product of consecutive elements in an array

后端 未结 8 1660
面向向阳花
面向向阳花 2021-01-30 03:13

I was asked this algorithm question during my onsite interview. Since I was not asked to sign NDA, I post it here for an answer.

Given an array of REAL

8条回答
  •  抹茶落季
    2021-01-30 04:06

    The algorithm is indeed O(n). When iterating the array, use a variable to store the max value found so far, a variable to store the max value of subarray that ends at a[i], and another variable to store minimum value that ends at a[i] to treat negative values.

    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;
    }
    

提交回复
热议问题