http://www.lintcode.com/zh-cn/problem/maximum-product-subarray/
找出一个序列中乘积最大的连续子序列(至少包含一个数)。
您在真实的面试中是否遇到过这个题?
样例
标签
Expand
比如, 序列 [2,3,-2,4]
中乘积最大的子序列为 [2,3]
,其乘积为6
。
相关题目 Expand
其实就是3中情况 整数 和负数 和0相乘
所以0起到隔断的作用
负数和整数相乘会更小,所以要找最小数
整数和整数相乘会更大,所以要找最大数
class Solution {
public:
/**
* @param nums: a vector of integers
* @return: an integer
*/
int maxProduct(vector<int>& nums) {
// write your code here
if (nums.size() <= 0)return 0;
int minx = nums[0];
int maxx = nums[0];
int mint = 1;
int maxt = 1;
int maxv=nums[0];
for (int i = 1; i<nums.size(); i++){
if (nums[i] == 0){
minx = 1;
maxx = 1;
}
else{
mint =minx;
maxt =maxx;
minx = min(min(mint*nums[i], nums[i]), maxt*nums[i]);
maxx = max(max(mint*nums[i], nums[i]), maxt*nums[i]);
maxv = max(maxv, maxx);
}
}
return maxv;
}
};