1.最大子数组和 力扣
class Solution {
const int INF=0x3f3f3f3f;
public:
int maxSubArray(vector<int>& nums)
{
int n=nums.size();
vector<int> dp(n+1);
int ret=-INF;
for(int i=1;i<=n;i++)
{
dp[i]=max(nums[i-1],dp[i-1]+nums[i-1]);
ret=max(ret,dp[i]);//不能从dp[0]开始找,从dp[1]开始找
}
return ret;
}
};
2.环形子数组最大和 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
const int INF = 0x3f3f3f3f;
public:
int maxSubarraySumCircular(vector<int>& nums)
{
int n = nums.size();
int sum = 0;
for (auto sh : nums) sum += sh;
vector<int> f(n + 1);//找最大值
vector<int> g(n + 1);//找最小值
int retmax = -INF;
int retmin = INF;
for (int i = 1; i <= n; i++)
{
f[i] = max(nums[i - 1], f[i - 1] + nums[i - 1]);
retmax = max(retmax, f[i]);
g[i] = min(nums[i - 1], g[i - 1] + nums[i - 1]);
retmin = min(retmin, g[i]);
}
/*if(sum-retmin==0)
return retmax;
return retmax == retmin ? retmax : max(retmax, sum - retmin);*/
return retmax == retmin ? retmax : max(retmax, sum - retmin==0?retmax:sum-retmin);
}
};
3.乘积最大子数组 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
int maxProduct(vector<int>& nums)
{
int n=nums.size();
vector<int> f(n+1);
auto g=f;
int ret=INT_MIN;
int retmin=INT_MAX;
f[0]=g[0]=1;
for(int i=1;i<=n;i++)
{
f[i]=max(nums[i-1],max(f[i-1]*nums[i-1],g[i-1]*nums[i-1]));
ret=max(ret,f[i]);//不能从dp[0]开始找,从dp[1]开始找
g[i]=min(nums[i-1],min(g[i-1]*nums[i-1],f[i-1]*nums[i-1]));
retmin=min(retmin,g[i]);
}
return ret;
}
};
4.成绩为正数的最长子数组长度 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
int getMaxLen(vector<int>& nums)
{
int n=nums.size();
vector<int> f(n+1);
auto g=f;
int ret=INT_MIN;
for(int i=1;i<=n;i++)
{
if(nums[i-1]>0)//正数
{
f[i]=f[i-1]+1;
g[i]=g[i-1]==0?0:g[i-1]+1;
}
else if(nums[i-1]<0)//负数
{
f[i]=g[i-1]==0?0:g[i-1]+1;
g[i]=f[i-1]+1;
}
ret=max(ret,f[i]);
}
return ret;
}
};
5.等差数列划分 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
int numberOfArithmeticSlices(vector<int>& nums)
{
int n=nums.size();
int dp[2]={0};
int sum=0;
for(int i=2;i<n;i++)
{
dp[i%2]=nums[i]-nums[i-1]==nums[i-1]-nums[i-2]?dp[(i-1)%2]+1:0;
sum+=dp[i%2];
}
return sum;
}
};
6.最长湍流子数组 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
int maxTurbulenceSize(vector<int>& arr)
{
int n=arr.size();
vector<int> f(n,1);
auto g=f;
int ret=1;
for(int i=1;i<n;i++)
{
if(arr[i]>arr[i-1])
{
f[i]=g[i-1]+1;
}
else if(arr[i]<arr[i-1])
{
g[i]=f[i-1]+1;
}
ret=max(ret,max(g[i],f[i]));
}
return ret;
}
};