首页 > 其他分享 >376. 摆动序列

376. 摆动序列

时间:2023-04-21 16:23:34浏览次数:49  
标签:nums int 序列 DP 摆动 dp 376

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。

例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。

相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。
子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。

给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。

输入:nums = [1,17,5,10,13,15,10,5,16,8]
输出:7
解释:这个序列包含几个长度为 7 摆动序列。
其中一个是 [1, 17, 10, 13, 10, 16, 8] ,各元素之间的差值为 (16, -7, 3, -3, 6, -8) 。

> 贪心解法

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
        if(nums.size() == 0) return 0;
        if(nums.size() == 1) return 1;
        int sum = 1;
        int pre = 0;
        int cur = 0;
        for(int i = 0;i < nums.size() - 1;i++){
            cur = nums[i+1] - nums[i];
            if((pre <= 0 && cur > 0) || (pre >= 0 && cur < 0)){
                sum++;
            }
            else if(cur == 0){
                continue;
            }
            pre = cur;
        }
        return sum;
    }
};

> 动态规划解法

class Solution {
public:
    //动态规划方程为
    //该区间为升序时    DP[i+1][0] = DP[i][0]   DP[i+1][1] = MAX(DP[i][1],DP[i][0]+1)
    //该区间为降序时    DP[i+1][0] = MAX(DP[i][0],DP[i][1]+1)   DP[i+1][1] = DP[i][1]
    int dp[1005][2];
    int wiggleMaxLength(vector<int>& nums) {
        int len = nums.size();
        memset(dp,0,sizeof dp);
        dp[0][0] = 0;
        dp[0][1] = 0;
        for(int i = 1; i < len;i++){
            int tmp = nums[i] - nums[i-1];
            if(tmp>0){
                dp[i][0] = dp[i-1][0]; 
                dp[i][1] = std::max(dp[i-1][1],dp[i-1][0]+1);
            }
            else if(tmp < 0){
                dp[i][0] = std::max(dp[i-1][0],dp[i-1][1]+1);
                dp[i][1] = dp[i-1][1];
            }
            else{
                dp[i][0] = dp[i-1][0];
                dp[i][1] = dp[i-1][1]; 
            }
        }
        return std::max(dp[len-1][0],dp[len-1][1]) + 1;
    }
};

标签:nums,int,序列,DP,摆动,dp,376
From: https://www.cnblogs.com/lihaoxiang/p/17340819.html

相关文章

  • 序列、排列的全排列的逆序对
    1.题目大意:给一个长度为n的的数组a,n是1到1e5,ai是1到1e5,问a的所有排序的序列的逆序对之和,会有重复的数字出现题目链接:https://ac.nowcoder.com/acm/contest/46597/Etypedeflonglongll;typedeflonglongLL;typedefpair<int,int>pii;typedefunsignedlonglongull;t......
  • 数字序列中某一位的数字
    classSolution{public:intdigitAtIndex(intn){if(!n)return0;longlongstart=1,len=1,cnt=1;//记录区间的起始位置,记录区间长度,cnt记录当前是几位数//往后走,跨度为一个区间while(1){len=start*9*cnt;......
  • Prufer 序列学习笔记
    一、前言感觉它本身没有什么用。主要是用于计数问题。前置知识:树的定义。二、定义对于一棵有\(n\)个节点的无根树\(T\),定义其Prufer序列为执行以下操作\(n-2\)次所形成的长度为\(n-2\)的正整数序列。·选择其编号最小的度数为\(1\)的节点,输出唯一与其相邻的节点的......
  • 分布滞后线性和非线性模型(DLNM)分析空气污染(臭氧)、温度对死亡率时间序列数据的影响|附
    全文下载链接 http://tecdat.cn/?p=23947 最近我们被客户要求撰写关于分布滞后线性和非线性模型的研究报告,包括一些图形和统计输出。分布滞后非线性模型(DLNM)表示一个建模框架,可以灵活地描述在时间序列数据中显示潜在非线性和滞后影响的关联。该方法论基于交叉基的定义,交叉基是......
  • 有向图的拓扑序列
    #include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;constintN=1e5+10;intn,m;inth[N],e[N],ne[N],idx;intd[N];//入线intq[N];voidadd(inta,intb){e[idx]=b;ne[idx]=h[a];h[a]=idx++;}boolto......
  • LOJ #6564 - 最长公共子序列(bitset 求 LCS)
    怎么全天下就我没见过?被薄纱了/ll还是考虑从朴素的DP入手优化。不难发现对于固定的\(i\),相邻的\(dp_{i,j}\)的差要么是\(0\)要么是\(1\),也就是说从压位的考虑角度可能很有前途。因此我们转而维护\(dp_{i,j}\)的差分数组\(v_{i,j}=dp_{i,j}-dp_{i,j-1}\)。考虑新添加一......
  • w5-1 序列合并
     方法一:#include<iostream>#include<queue>usingnamespacestd;//排序模拟,tle做法intnow1[100000],now2[100000];intmain(){intn;priority_queue<int,vector<int>,greater<int>>pq;cin>>n;for(inti=0;i<......
  • 通过fastaread读取DNA序列并进行检测matlab仿真
    1.算法描述fastareadfastaread函数是matlab生物信息学工具箱内置的一个函数,给我们的使用上带来了巨大的方便。对于基因DNA序列,转录RNA序列和表达蛋白序列的读取非常方便。使用语法为:p53nt=fastaread('p53nt.txt')%p53nt.txt为fasta格式存储序列的文件返回的p53nt......
  • w5-4 验证栈序列
     #include<iostream>#include<stack>usingnamespacestd;intq,n,a[100000],b[100000],num;intmain(){cin>>q;stack<int>s;for(intj=0;j<q;++j){cin>>n;num=0;for(inti=0;i<n;++......
  • DNA序列数据处理
    dna序列数据处理通常包括以下步骤:数据预处理:首先,需要对原始dna序列数据进行预处理。其中包括测序错误的纠正、碱基质量过滤和去除低质量序列等。这个阶段是非常重要的,因为数据预处理的质量直接影响后续的特征提取和模型学习。特征提取:在dna序列分析中,会涉及到许多不同的特征......