leetcode2826.将三个组排序

java 复制代码
class Solution {
    public int minimumOperations(List<Integer> nums) {
        int[][] dp = new int[nums.size()][3 + 1];
        dp[0][nums.get(0)]=1;
        for (int i = 1; i < nums.size(); i++) {
            dp[i][1]=dp[i-1][1];
            dp[i][2]=dp[i-1][2];
            dp[i][3]=dp[i-1][3];
            switch (nums.get(i)){
                case 1 -> dp[i][1] = Math.max(dp[i - 1][1] + 1, dp[i - 1][0] + 1);
                case 2 -> dp[i][2] = Math.max(dp[i - 1][2] + 1, dp[i - 1][1] + 1);
                case 3-> dp[i][3] = Math.max(dp[i - 1][3] + 1, Math.max(dp[i - 1][2] + 1, dp[i - 1][1] + 1));
            }
        }
        int n = nums.size();
        return n - Math.max(dp[n - 1][1], Math.max(dp[n - 1][2], dp[n - 1][3]));
    }
}

优化版本

java 复制代码
class Solution {
    public int minimumOperations(List<Integer> nums) {
        //1.定义状态
        int _1 = 0, _2 = 0, _3 = 0;//分别表示以1、2、3结尾的子序列长度
        //2.状态转移
        for (int num : nums) {
            switch (num){
                case 1-> _1 = Math.max(_1 + 1, 1);
                case 2-> _2 = Math.max(_2 + 1, _1 + 1);
                case 3-> _3 = Math.max(_3 + 1, Math.max(_2 + 1, _1 + 1));
            }
        }
        //3.返回结果
        return nums.size() - Math.max(_1, Math.max(_2, _3));
    }
}
相关推荐
狐5738 分钟前
2026-01-22-LeetCode刷题笔记-3507-移除最小数对使数组有序I
笔记·leetcode
充值修改昵称38 分钟前
数据结构基础:B树磁盘IO优化的数据结构艺术
数据结构·b树·python·算法
程序员-King.7 小时前
day158—回溯—全排列(LeetCode-46)
算法·leetcode·深度优先·回溯·递归
月挽清风8 小时前
代码随想录第七天:
数据结构·c++·算法
小O的算法实验室8 小时前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
小郭团队9 小时前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称9 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch9 小时前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
浅念-9 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me10 小时前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人