class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum = 0, maxv = -0x3f3f3f3f; //求最大值,max初始化为负无穷
for (int i = 0; i < nums.size(); i ++ ) //遍历数组
{
sum += nums[i];
maxv = max(maxv, sum); //一边累加sum一边更新最大值
if (sum < 0) sum = 0; //当sum小于0,则丢弃重开
//这里你可能会问为什么sum小于0就丢弃,如果数组里所有的数都是负数呢?
//答:若数组中全是负数,那么最大值就是最小的那一个负数,因为负数越累加越小。
}
return maxv;
}
};
建议这样写:
正无穷=0x3f3f3f3f
负无穷=0xcfcfcfcf
优点:
正无穷+正无穷=正无穷
负无穷+负无穷=负无穷
66666,记笔记记笔记
太强了
nice
若数组中全是负数,那么最大值就是最大的那一个负数,不是最小
对对,应该是这么说