当前位置: 首页 > 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/news/328487.html

相关文章:

  • 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双十一有什么值得买?分享五款优质好物提高幸福感!
  • GPT对话知识库——bootloader是什么?ymodel协议是什么?
  • `git restore` 和 `git checkout` 用于丢弃工作区的改动, `git switch` 和 `git checkout` 用来切换分支
  • Samba 多平台文件共享服务
  • 共享ip的定义?有什么坏处
  • Kotlin IntelliJ IDEA 环境搭建
  • 决策树:机器学习中的强大工具
  • 基于SpringBoot+Vue+MySQL的个性化电影推荐
  • 在WPF中实现多语言切换的四种方式
  • Android——添加联系人
  • MySQL 之索引详解