day-50 求出最长好子序列 I


思路

二维dp,dp[i][h]表示nums[i] 结尾,且有不超过 h 个下标满足条件的最长好子序列的长度(0<=h<=k),二维数组dp初始值全为1

解题过程

状态转换方程:

1.nums[i]==nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h]+1)

2.nums[i]!=nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h-1]+1)

Code

java 复制代码
class Solution {
    public int maximumLength(int[] nums, int k) {
        int n = nums.length;
        int[][] dp = new int[n][k + 1];
        int ans = 0;
        for(int i=0;i<n;i++){
            Arrays.fill(dp[i],1);
        }
        for (int i = 0; i < n; i++) {
            for (int h = 0; h <= k; h++) {
                for (int j = 0; j < i; j++) {
                    if (nums[i] == nums[j]) {
                        dp[i][h] = Math.max(dp[i][h], dp[j][h]+1);
                    } else if (h > 0) {
                        dp[i][h] = Math.max(dp[i][h], dp[j][h - 1]+1);
                    }
                }
            }
            ans = Math.max(ans, dp[i][k]);
        }
        return ans;
    }
}
相关推荐
haogexiaole7 小时前
贪心算法python
算法·贪心算法
希望20177 小时前
图论基础知识
算法·图论
m0_713541847 小时前
systemverilog如何解决不能使用变量索引来进行位选择的范围指定
算法·systemverilog
七牛云行业应用8 小时前
深度解析强化学习(RL):原理、算法与金融应用
人工智能·算法·金融
和编程干到底8 小时前
数据结构 栈和队列、树
数据结构·算法
纪元A梦8 小时前
贪心算法在GNN邻域采样问题中的深度解析
算法·贪心算法
宇钶宇夕8 小时前
西门子 S7-200 SMART PLC 核心指令详解:从移位、上升沿和比较指令到流水灯控制程序实战
运维·算法·自动化
爱编程的化学家8 小时前
代码随想录算法训练营第十一天--二叉树2 || 226.翻转二叉树 / 101.对称二叉树 / 104.二叉树的最大深度 / 111.二叉树的最小深度
数据结构·c++·算法·leetcode·二叉树·代码随想录
tqs_123458 小时前
redis zset 处理大规模数据分页
java·算法·哈希算法
吃着火锅x唱着歌9 小时前
LeetCode 1446.连续字符
算法·leetcode·职场和发展