动态规划算法-子序列问题(数组中不连续的一段):28.摆动序列

题目链接:376. 摆动序列(中等)

算法原理:

解法:动态规划

类似👉 动态规划算法-子数组、子串系列(数组中连续的一段):24.最长湍流子数组

Java代码:

java 复制代码
import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 王洋
 * Date: 2025-10-23
 * Time: 19:37
 */
class Solution {
    //376.摆动序列
    //看完算法原理后自己写的,一遍过,跟第24题(978.最长的湍流子数组)思路一样
    //就是区别在这个可以不连续,所以要逐步更新,只在最长的长度上+1
    //吴小哲跟我写的一样
    public int wiggleMaxLength(int[] nums) {
        int n=nums.length;
        int[] f=new int[n];
        int[] g=new int[n];
        Arrays.fill(f,1);
        Arrays.fill(g,1);
        for(int i=1;i<n;i++){
            for(int j=0;j<i;j++){
                if(nums[j]<nums[i]) f[i]=Math.max(f[i],g[j]+1);
                else if(nums[j]>nums[i]) g[i]=Math.max(g[i],f[j]+1);
            }
        }
        int ret=1;
        for(int x:f) ret=Math.max(ret,x);
        for(int x:g) ret=Math.max(ret,x);
        return ret;
    }
}
相关推荐
大模型玩家七七1 分钟前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
CodeToGym32 分钟前
【Java 办公自动化】Apache POI 入门:手把手教你实现 Excel 导入与导出
java·apache·excel
凡人叶枫42 分钟前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
power 雀儿1 小时前
掩码(Mask)机制 结合 多头自注意力函数
算法
会叫的恐龙1 小时前
C++ 核心知识点汇总(第六日)(字符串)
c++·算法·字符串
JMchen1231 小时前
Android后台服务与网络保活:WorkManager的实战应用
android·java·网络·kotlin·php·android-studio
小糯米6011 小时前
C++顺序表和vector
开发语言·c++·算法
阔皮大师1 小时前
INote轻量文本编辑器
java·javascript·python·c#
小法师爱分享1 小时前
StickyNotes,简单便签超实用
java·python
qq_297574671 小时前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器