最大子序和-贪心
题目:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
分析:贪心的规则为:当累积和局部最大,就更新,当累积和小于0了,就重新累积
#include "_myPrint.cpp"
class Solution{
public:
int maxArrSum(vector<int>& nums){
int res = INT_MIN; // result
int tmp = 0; // temp summary
for (int i=0; i<nums.size(); i++){
tmp += nums[i]; // sum
if (tmp>res) res=tmp; // find a larger sum
if (tmp<0) tmp=0; // sum<0 means encounter negative value, restart a tmp sum
}
return res;
}
};
int main(){
Solution sl;
vector<int> nums = {-2,1,-3,4,-1,2,1,-5,4};
int res = sl.maxArrSum(nums);
cout << res << endl;
}