LintCode_191 Maximum Product Subarray

来源:互联网 发布:d3.js 地图轨迹点 编辑:程序博客网 时间:2024/06/11 06:32

Find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example

For example, given the array [2,3,-2,4], the contiguous subarray [2,3] has the largest product = 6.

思路是dp解决, 过程中保存最小的整数与最大的负数, 然后你懂的~
class Solution {public:    /**     * @param nums: a vector of integers     * @return: an integer     */    int maxProduct(vector<int>& nums) {        // write your code here        const int len = nums.size();        int dp[len];        int neg_max = INT_MIN;        int pos_min = INT_MAX;        int max_val;        for (int i = 0; i < nums.size(); i++) {            if (i == 0) {                dp[0] = nums[0];                max_val= dp[0];            } else {                if (dp[i-1] !=0) {                    dp[i] = dp[i-1] * nums[i];                }else {                    dp[i] = nums[i];                }                                if (dp[i] > 0) {                    max_val = max(max_val, dp[i]);                }                if (dp[i] < 0) {                    int max_neg;                    if (neg_max==INT_MIN)                         max_neg = dp[i];                    else                         max_neg = dp[i] / neg_max;                    max_val = max(max_val, max_neg);                }                if (dp[i] == 0) {                     max_val = max(max_val, dp[i]);                     neg_max = INT_MIN;                }            }            //cout<<dp[i]<<" "<<neg_max<<endl;            if (dp[i] < 0) {                neg_max = max(neg_max, dp[i]);            }        }        return max_val;    }};






0 0