2022.5.18今天你刷题了吗?
题目:
给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
分析:
这个解法是我看别人的。它的思路是通过两个数
sum:用来遍历数组
res:用来记录最的子数组和
首先把sum和res设置为nums【】的第一个元素,利用max求最大也就是nums【】第一个元素。
然后判断第一个元素的正负,如果为正则加上nums【】第二个元素,如果为负则把nums【】第二个元素赋值给sum。
因为:如果第一个为负,则不用去加下一个元素了,直接去把下一个元素赋值给它!!!就好比。举个例子,第一个元素=-3,第二个为-4,-2,2三种情况
-4情况:sum此时=-4,然后通过max比较,保留之前的res还是=-3
-2的情况:sum此时=-2,然后通过max比较,之前的res=-2
2的情况:sum此时=2,然后通过max比较,之前的res=2
核心思想在于利用了一个res记录最大值以及判断当前的sum为正还是为负,为正数就可以交,就算加的结果变小,还有res保留上次最大。为负数就不用加了,直接取值就行,因为下一个数如果比你大,还不如直接就取它作为最大值,比你小,就不变
解析:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int sum=0;//遍历数组
int res=nums[0];//存放大值
for(int num : nums)
{
if(sum>0)
{
sum+=num;
}
else
{
sum=num;
}
res=max(sum,res);
}
return res;
}
};