Coding Caprice - dynamic programming11

1143. 最长公共子序列

cpp 复制代码
class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        int t1 = text1.size();
        int t2 = text2.size();
        vector<vector<int>> dp(t1+1, vector<int> (t2+1, 0));
        for(int i=1; i<t1+1; ++i){
            for(int j=1; j<t2+1; ++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[t1][t2];
    }
};

1035. 不相交的线

cpp 复制代码
class Solution {
public:
    int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> dp(nums1.size()+1, vector<int> (nums2.size()+1, 0));
        for(int i=1; i<nums1.size()+1; ++i){
            for(int j=1; j<nums2.size()+1; ++j){
                if(nums1[i-1] == nums2[j-1]){
                    dp[i][j] = dp[i-1][j-1] + 1;
                }else{
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
                }
            }
        }
        return dp[nums1.size()][nums2.size()];
    }
};

53. 最大子数组和

cpp 复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int out = *max_element(nums.begin(), nums.end());
        if(out<0){return out;}
        int startid = 0;
        while(startid<nums.size() && nums[startid]<0){
            startid++;
        }
        int dp_last = nums[startid];
        int sum_tmp = 0;
        int dp = out;
        for(int i=startid+1; i<nums.size(); ++i){
            if(nums[i]<0){
                sum_tmp += nums[i];
            }else{
                int tmp = dp_last + nums[i] + sum_tmp;
                dp = max(tmp, nums[i]);
                out = max(out, dp);
                sum_tmp = 0;
                dp_last = dp;
            }
        }
        return out;
    }
};

动规只考虑一个方向就可以了

392. 判断子序列

cpp 复制代码
class Solution {
public:
    bool isSubsequence(string s, string t) {
        while(s.size()!=0 && t.size()!=0){
            if(t.back() == s.back()){
                s.pop_back();
            }
            t.pop_back();
        }
        return s.size()==0;
    }
};
  • 投机省事要仔细
相关推荐
董董灿是个攻城狮17 分钟前
AI视觉连载8:传统 CV 之边缘检测
算法
AI软著研究员7 小时前
程序员必看:软著不是“面子工程”,是代码的“法律保险”
算法
FunnySaltyFish8 小时前
什么?Compose 把 GapBuffer 换成了 LinkBuffer?
算法·kotlin·android jetpack
颜酱9 小时前
理解二叉树最近公共祖先(LCA):从基础到变种解析
javascript·后端·算法
地平线开发者1 天前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮1 天前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者1 天前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考1 天前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx1 天前
CART决策树基本原理
算法·机器学习
Wect1 天前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript