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

代码随想录算法训练营day44

1.最长公共子序列

1.1 题目

. - 力扣(LeetCode)

1.2 题解

class Solution 
{
public:
    int longestCommonSubsequence(string text1, string text2) 
    {
        //确定dp数组,dp[i][j]表示长度为i的text1与长度为j的text2的最长公共子序列的长度
        vector<vector<int>> dp(text1.size()+1, vector<int>(text2.size()+1, 0));

        //确定递推逻辑
        /*if (text1[i - 1] == text2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;
        else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);*/

        for (int i = 1; i <= text1.size(); i++)
        {
            for (int j = 1; j <= text2.size(); j++)
            {
                if (text1[i - 1] == text2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;
                else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
            }
        }
        return dp[text1.size()][text2.size()];

    }
};

2.不相交的线

2.1 题目

. - 力扣(LeetCode)

2.2 题解

class Solution {
public:
    int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) 
    {
        //确定dp数组,dp[i][j]表示长度为i的nums1与长度为j的nums2的最长公共子序列的长度
        vector<vector<int>> dp(nums1.size()+1, vector<int>(nums2.size()+1, 0));

        //确定递推逻辑
        /*if (nums1[i - 1] == nums2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;
        else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);*/

        for (int i = 1; i <= nums1.size(); i++)
        {
            for (int j = 1; j <= nums2.size(); j++)
            {
                if (nums1[i - 1] == nums2[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;
                else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
            }
        }
        return dp[nums1.size()][nums2.size()];
    }
};

3.最大子序和

3.1 题目

. - 力扣(LeetCode)

3.2 题解

class Solution {
public:
    int maxSubArray(vector<int>& nums) 
    {
        //确定dp数组,dp[i]表示以nums[i]结尾的数组的连续子数组的最大和
        vector<int> dp(nums.size(), 0);

        //确定递推关系
        //dp[i] = max(dp[i - 1] + nums[i],nums[i]);

        //初始化
        dp[0] = nums[0];

        int result = nums[0];
        //遍历
        for (int i = 1; i < nums.size(); i++)
        {
            dp[i] = max(dp[i - 1] + nums[i], nums[i]);
            result = max(result, dp[i]);
        }
        return result;
    }
};

4.判断子序列

4.1 题目

. - 力扣(LeetCode)

4.2 题解

class Solution {
public:
    bool isSubsequence(string s, string t) 
    {
        //确定dp数组,dp[i][j]表示,长度为i的s与长度为j的t的最大公共子序列的长度
        vector<vector<int>> dp(s.size() + 1, vector<int>(t.size() + 1, 0));

        //确定递推逻辑
        

        for (int i = 1; i <= s.size(); i++)
        {
            for (int j = 1; j <= t.size(); j++)
            {
                if (s[i - 1] == t[j - 1])dp[i][j] = dp[i - 1][j - 1] + 1;
                else dp[i][j] = dp[i][j - 1];
            }
        }

        int length= dp[s.size()][t.size()];
        if (length == s.size())return true;
        return false;



    }
};


http://www.kler.cn/a/328487.html

相关文章:

  • 【经验分享】2024年11月下半年软件设计师考试选择题估分(持续更新~~)
  • MODBUS TCP转CANOpen网关
  • C指针之舞——指针探秘之旅
  • 【汇编语言】数据处理的两个基本问题(二) —— 解密汇编语言:数据长度与寻址方式的综合应用
  • 浅谈数据仓库的架构及其演变
  • Area-Composition模型部署指南
  • PostgreSQL 数据库语法学习:深入理解 `JOIN` 操作
  • 【AI基础】pytorch lightning 基础学习
  • 【JavaEE初阶】深入解析死锁的产生和避免以及内存不可见问题
  • 药品识别与分类系统源码分享
  • 【Transformer】长距离依赖
  • 微信小程序中的 `<block>` 元素:高效渲染与结构清晰的利器
  • 初识C语言(五)
  • 鸿蒙开发(NEXT/API 12)【硬件(传感器开发)】传感器服务
  • Unity 2D RPG Kit 学习笔记
  • 滚雪球学Oracle[8.1讲]:高级主题与未来趋势
  • vite 快速入门指南
  • Flask+微信小程序实现Login+Profile
  • python-ds:Python 中的数据结构库(适用于面试的数据结构和算法合集)
  • 眼镜识别数据集类别和数量已经在文档中说明,训练集和验证集共2200,g是眼镜,ng是没有眼镜。
  • 可视化图表与源代码显示配置项及页面的动态调整功能分析
  • 9、论文阅读:无监督的感知驱动深水下图像增强
  • Arduino UNO R3自学笔记6 之 Arduino引脚(IO)功能介绍
  • 电笔有用吗
  • 【PostgreSQL 】入门篇——支持的各种数据类型介绍,包括整数、浮点数、字符串、日期、JSON、数组等
  • 2024双十一有什么值得买?分享五款优质好物提高幸福感!