当前位置: 首页 > news >正文

代码随想录-动态规划24

leetcode-300-最长递增子序列

dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度

dp[j]是(0,i-1)不包括i的以nums[i-1]结尾的最长递增子序列长度

int lengthOfLIS(int* nums, int numsSize) {
    if(numsSize <= 1)
        return numsSize;
    int dp[numsSize];
    for(int i = 0 ; i < numsSize ; i++){
        dp[i] = 1;
    }
    int res = 1;
    for(int i = 1 ; i < numsSize ; i++){
        for(int j = 0 ; j < i ; j++){
            if(nums[i] > nums[j])
                dp[i] = fmax(dp[i],dp[j]+1);
        }
        res = fmax(res,dp[i]);
    }
    return res;
}

leetcode-674-最长连续递增序列

不连续递增子序列的跟前0-i 个状态有关,连续递增的子序列只跟前一个状态有关

int findLengthOfLCIS(int* nums, int numsSize) {
    if(numsSize <= 1)
        return numsSize;
    int dp[numsSize];
    for(int i = 0 ; i < numsSize ; i++)
        dp[i] = 1;
    int res = 0;
    for(int i = 1 ; i < numsSize ; i++){
        if(nums[i] > nums[i-1])
            dp[i] = dp[i-1]+1;
        res = fmax(res,dp[i]);
    }
    return res;
}

leetcode-718-最长重复子数组

dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。

int findLength(int* nums1, int nums1Size, int* nums2, int nums2Size) {
    int dp[nums1Size+1][nums2Size+1];
    for(int i = 0 ; i <= nums1Size ; i++){
        memset(dp[i],0,sizeof(int)*(nums2Size+1));
    }
    int res = 0;
    for(int i = 1 ; i <= nums1Size ; i++){
        for(int j = 1 ; j <= nums2Size ; j++){
            if(nums1[i-1] == nums2[j-1]){
                dp[i][j] = dp[i-1][j-1]+1;
            }
            res = fmax(res,dp[i][j]);
        }
    }
    return res;
}

leetcode-1143-最长公共子序列

区别于 349.两个数组交集 

int longestCommonSubsequence(char* text1, char* text2) {
    int len1 = strlen(text1);
    int len2 = strlen(text2);
    int dp[len1+1][len2+1];
    for(int i = 0 ; i <= len1 ; i++){
        memset(dp[i],0,sizeof(int)*(len2+1));
    }
    for(int i = 1 ; i <= len1 ; i++){
        for(int j = 1 ; j <= len2 ; j++){
            if(text1[i-1] == text2[j-1]){
                dp[i][j] = dp[i-1][j-1]+1;
            }else{
                dp[i][j] = fmax(dp[i-1][j],dp[i][j-1]);
            }
        }
    }
    return dp[len1][len2];
}

leetcode-1035-不相交的线

本质是求最长公共子序列

int maxUncrossedLines(int* nums1, int nums1Size, int* nums2, int nums2Size) {
    int dp[nums1Size+1][nums2Size+1];
    for(int i = 0 ; i <= nums1Size ; i++){
        memset(dp[i],0,sizeof(int)*(nums2Size+1));
    }
    for(int i = 1 ; i <= nums1Size ; i++){
        for(int j = 1 ; j <= nums2Size ; j++){
            if(nums1[i-1] == nums2[j-1]){
                dp[i][j] = dp[i-1][j-1]+1;
            }else{
                dp[i][j] = fmax(dp[i-1][j],dp[i][j-1]);
            }
        }
    }
    return dp[nums1Size][nums2Size];
}

http://www.dtcms.com/a/121828.html

相关文章:

  • 【Windows】Win2008服务器SQL服务监控重启脚本
  • golang gmp模型分析
  • 【Game】Powerful——Martial Arts Challenge(6)
  • 数据库实践题目:在线书店管理系统
  • 高性能服务开发利器:redis+lua
  • Spring 框架的核心基础:IoC 和 AOP
  • 【算法竞赛】回文字符串+思维模拟(蓝桥杯真题·回文字符串·代码清晰易懂)
  • 巧记英语四级单词 Unit3-上【晓艳老师版】
  • 【SpringCloud】从入门到精通(下)
  • TCP 与 UDP
  • Qt 开发时可以在函数内引用的头文件
  • 国网B接口协议调阅实时视频接口流程详解以及检索失败原因(电网B接口)
  • 蓝桥杯刷题总结 + 应赛技巧
  • MySQL表的增删查改(基础)
  • python学智能算法(九)|决策树深入理解
  • [前端]从人体结构看网页三要素:HTML、CSS 与 JavaScript
  • C#.NET模拟用户点击按钮button1.PerformClick自动化测试
  • 动手人形机器人(RL)
  • 去除Mysql表中的空格、回车、换行符和特殊字符
  • 淘宝API与小程序深度联动:商品详情页“一键转卖”功能开发
  • NO.83十六届蓝桥杯备战|动态规划-基础线性DP|台阶问题|最大子段和|传球游戏|乌龟棋(C++)
  • Elasticsearch 集群搭建
  • Vue3+Vite+TypeScript+Element Plus开发-10.多用户动态加载菜单
  • Hi Robot——大脑加强版的π0:基于「VLM的高层次推理+ VLA低层次任务执行」的复杂指令跟随及交互式反馈
  • Python标准库-copy
  • FairMOT复现过程中cython_bbox库问题
  • go游戏后端开发32:自摸杠处理逻辑
  • Elasticsearch中的基本全文搜索和过滤
  • Spring Boot应用中可能出现的Full GC问题
  • 滑动窗口(2)—最⼤连续1的个数III