class Solution {
public:
int maxSubArray(vector<int>& nums) {
int minsum = nums[0];
int maxsum = nums[0];//记录到目前为止最大和最小的和
int maxsubsum = nums[0];
int sum = nums[0];
for (int i = 1; i < nums.size(); i++) {
sum += nums[i];
maxsubsum = nums[i] > maxsubsum ? nums[i] : maxsubsum;
int temp = sum >(sum - minsum) ? sum : sum - minsum;
maxsubsum = maxsubsum > temp ? maxsubsum : temp;
if (maxsum < sum) {
maxsum = sum;
continue;
}
if (sum < minsum) {
minsum = sum;
continue;
}
}
return maxsubsum;
}
};
问题的解决,取决于你怎么定义这个问题。。。。。
下面这种解法,定义每一步得到的nums[i]都是必须包含数组中第i个数时的子序列和最大值,其实也就是限制了终点,你计算的时候必须往前计算和,也就是nums[i-1];最终的答案肯定是nums[i]中的一个,那么我就每一步都和最大值比较,最终最大值maxvalue就是我们需要的答案了。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int maxvalue = nums[0];
for (int i = 1; i < nums.size(); i++) {
nums[i] = nums[i] + (nums[i - 1]>0 ? nums[i - 1] : 0);
maxvalue = max(maxvalue, nums[i]);
}
return maxvalue;
}
};