class Solution {
public:
/**
* @param nums: A list of integers
* @return: A integer indicate the sum of max subarray
*/
int maxSubArray(vector<int> nums) {
// write your code here
int max = nums[0];
int sum = 0;
for(int i = 0; i < nums.size();i++){
if(sum < 0){sum = 0;}
sum += nums[i];
max = max>sum?max:sum;
}
return max;
}
};
所谓的滑块算法!!!
最小子数组
class Solution {
public:
/**
* @param nums: a list of integers
* @return: A integer denote the sum of minimum subarray
*/
int minSubArray(vector<int> nums) {
// write your code here
int min = nums[0];
int sum = 0;
for(int i=0;i<nums.size();i++){
if(sum > 0){sum = 0;}
sum = sum + nums[i];
//前面的sum加上当前元素(1)若前面的sum为负,当前元素也为负,则sum更小
//(2)若当前元素为正,sum变大,min这时比sum小,不影响min
//(3)sum为正,则在上一步时sum变成0,不会使min有变大的趋向
min = min<sum?min:sum;
}
return min;
}
};