题目考察的知识点:二分

题目解答方法的文字分析:v1数组存放左边的乘积,v2数组存放右边的乘积,一个数的左右两边乘积等于数组 milk_amount 中除了 milk_amount[i] 之外其他元素的乘积。

本题解析所用的编程语言:c++

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param milk_amount int整型vector 
     * @return int整型vector
     */
    vector<int> product_except_self(vector<int>& milk_amount) {
        // write code here
        int n = milk_amount.size();
        vector<int> v(n), v1(n), v2(n);
        int x = 1, y = 1;
        for (int i = 0, j = milk_amount.size() - 1; i < milk_amount.size(); ++i, --j)
        {
            x *= milk_amount[i];
            y *= milk_amount[j];
            v1[i] = x;
            v2[j] = y;
        }
        v[0] = v2[1];
        v[n - 1] = v1[n - 2];
        for (int i = 1; i < milk_amount.size() - 1; ++i)
            v[i] = v1[i - 1] * v2[i + 1];

        return v;
    }
};