2023-07-11力扣每日一题

链接:

https://leetcode.cn/problems/maximum-alternating-subsequence-sum/

题意:

给定一个数组,求一个子序列,使这个子序列的奇数位和-偶数位和最大(下标从1开始的话|反正第一个数是+)

解:

找下坡,曲折处两个分下坡大于一个总下坡(如图)

2023-07-11力扣每日一题_第1张图片

实际代码:

思维:

#include
#include
using namespace std;
typedef long long int ll;
const int Nmax=1E5+7;
long long maxAlternatingSum(vector& nums)
{
    ll ans=0;bool zt=1;int temp=nums[0];
    
    for(int i=1;inums[i-1])
        {
            ans+=temp-nums[i-1];
            zt=1;temp=nums[i];
        }
        
        temp=max(temp,nums[i]);
    }
    return ans+temp;
}
int main()
{
    vector nums;
    int n;cin>>n;
    
    for(int f=1;f<=n;f++)
    {
        int temp;cin>>temp;
        nums.push_back(temp);
    }
    
    ll ans=maxAlternatingSum(nums);
    cout<

DP?:

#include
#include
using namespace std;
typedef long long int ll;
const int Nmax=1E5+7;
long long maxAlternatingSum(vector& nums)
{
    ll A1=0,A2=0;//最后一位+ 最后一位- 
    
    int lg=nums.size();
    for(int i=0;i nums;
    int n;cin>>n;
    
    for(int f=1;f<=n;f++)
    {
        int temp;cin>>temp;
        nums.push_back(temp);
    }
    
    ll ans=maxAlternatingSum(nums);
    cout<

限制:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 105

你可能感兴趣的:(力扣每日一题,leetcode,算法)