最大子数组和
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int curMaxSum=0;
int res=INT_MIN;
for(int i=0;i<nums.size();++i){
curMaxSum=max(nums[i],curMaxSum+nums[i]);
res=max(res,curMaxSum);
}
return res;
}
};
乘积最大子数组
class Solution {
public:
int maxProduct(vector<int>& nums) {
//初始化当前最小最大乘积
int curMax=1;
int curMin=1;
int res=INT_MIN;
for(int i=0;i<nums.size();++i){
if(nums[i]<0){//当前来到的数<0,则最小乘积变成最大,最大乘积变成最小
swap(curMax,curMin);
}
// 如果该元素为正数:
// 如果到上一个元素为止的最大乘积也是正数,那么直接乘上就好了,同样的最大乘积也会变得更大
// 如果到上一个元素为止的最大乘积是负数,那么最大乘积就会变成该元素本身,且连续性被断掉
// 如果该元素为负数:
// 如果到上一个元素为止的最大乘积也是负数,那么直接乘上就好了,同样的最大乘积也会变得更大
// 如果到上一个元素为止的最大乘积是正数,那么最大乘积就会不变,且连续性被断掉
curMax=max(nums[i],curMax*nums[i]);
curMin=min(nums[i],curMin*nums[i]);
res=max(res,curMax);
}
return res;
}
};