首页 > 编程语言 >算法练习-day42

算法练习-day42

时间:2023-08-08 16:01:31浏览次数:34  
标签:int 练习 字符串 算法 vector 数组 序列 day42 dp

动态规划

1143. 最长公共子序列

题意:给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。

  • 例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。

两个字符串的 公共子序列 是这两个字符串所共同拥有的子序列。

实例:

算法练习-day42_动态规划

思路:本题和我们之前的718. 最长重复子数组非常类似,不同点就在于这个重复的元素是可以拼接的,因此在两元素不相等时,我们需要保存之前的最长重复元素的长度,即当text1!=text2时,dp[i][j]=max(dp[i-1][j],dp[i][j-1]),当text1==text2时,dp[i][j]=dp[i-1][j-1]+1,因此代码如下

C++代码:

    int longestCommonSubsequence(string text1, string text2) {
        vector<vector<int>> dp(text1.size()+1,vector<int>(text2.size()+1,0));
        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-1][j],dp[i][j-1]);
                }
            }
        }
        return dp[text1.size()][text2.size()];
    }

1035. 不相交的线

题意:在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足满足:

  1.  nums1[i] == nums2[j]
  2. 且绘制的直线不与任何其他连线(非水平线)相交。

注意:连线即使在端点也不能相交:每个数字只能属于一条连线。以这种方法绘制线条,并返回可以绘制的最大连线数。

实例:

算法练习-day42_动态规划_02

思路:本题其实就是找到两个数组的最长公共子序列,思路和代码和上一道题一模一样

C++代码:

   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();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-1][j],dp[i][j-1]);
                }
            }
        }
        return dp[nums1.size()][nums2.size()];
    }

53. 最大子数组和

题意:给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

实例:

算法练习-day42_动态规划_03

思路:本题就比较简单了。首先我们初始化数组dp[0]=nums[0],从第二个元素开始比较,该位置存储的大小是该位置的元素和该位置元素+前面元素和的最大值,以此类推。数组dp中就会存储出一个最大子数组和的值,所以在输出时需要排序出dp数组,最后一个元素就是最大子数组和。

C++代码:

    int maxSubArray(vector<int>& nums) {
        vector<int> dp(nums.size(),0);
        dp[0]=nums[0];
        for(int i=1;i<nums.size();i++)
        {
            dp[i]=max(nums[i],dp[i-1]+nums[i]);
        }
        sort(dp.begin(),dp.end());
        return dp[nums.size()-1];
    }

标签:int,练习,字符串,算法,vector,数组,序列,day42,dp
From: https://blog.51cto.com/u_15209404/7009976

相关文章

  • 数据结构与算法 --- 数据结构绪论
    数据结构起源早期人们都把计算机理解为数值计算工具,就是感觉计算机当然是用来计算的,所以计算机解决问题,应该是先从具体问题中抽象出一个适当的数据模型,设计出一个解此数据模型的算法,然后再编写程序,得到一个实际的软件。可现实中,我们更多的不是解决数值计算的问题,而是需要一些更......
  • 每日一练 | 华为认证真题练习Day92
    1、TFTP基于TCP协议。A.对B.错2、Trunk类型的端口和Hybrid类型的端口在接收数据帧时的处理方式相同。A.TrueB.False3、以下哪种PPPoE的报文是非单播方式发送的?A.PADSB.PADIC.PADOD.PADR4、HDLC帧由以下哪些字段组成?(多选)A.控制字段(C)B.帧校验序列字段(FCS)C.地址字段(A)D.标......
  • 【C语言基础练习】
    学习来源:https://www.bilibili.com/video/BV1q54y1q79w/?spm_id_from=333.337.search-card.all.click1.判断一个数是否为奇数。#include<stdio.h>intmain(){ inta; printf("请输入需要判断的数字\n"); scanf_s("%d",&a); if(a%2==1) printf("奇数\......
  • 代码随想录算法训练营第十三天| 239. 滑动窗口最大值 347.前 K 个高频元素 总结
    239.滑动窗口最大值 (一刷至少需要理解思路)    卡哥建议:之前讲的都是栈的应用,这次该是队列的应用了。本题算比较有难度的,需要自己去构造单调队列,建议先看视频来理解。    题目链接/文章讲解/视频讲解:https://programmercarl.com/0239.%E6%BB%91%E5%8A%A8%E7%AA%......
  • 【CV算法原理理解】人脸对齐之GBDT(ERT)算法原理
    前言 概念树、决策树、二叉树、随机森林、随机蕨、CART分类回归树;GBDT的全称是GradientBoostingDecisionTree,梯度提升决策树。Xgboost;简介OneMillisecondFaceAlignmentwithanEnsembleofRegressionTrees算法(以下简称GBDT)是一种基于回归树的人脸对齐算法,这种......
  • 原生JS实现一个不固定高度的虚拟列表核心算法
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>不定高度的虚拟列表</title>&l......
  • 100到python练习题(三)
    编写一个程序,找出一个列表中的最小的两个数。num_list=[10,5,8,2,15,3]sorted_list=sorted(num_list)min_numbers=sorted_list[:2]print("列表中的最小的两个数为:",min_numbers)编写一个程序,计算斐波那契数列的第n项。deffibonacci(n):ifn<=0:......
  • 服装行业多模态算法个性化产品定制方案
    一、项目背景AI赋能服装设计师,设计好看、好穿、好卖的服装传统服装行业痛点•设计师无法准确捕捉市场趋势,抓住中国潮流•上新周期长,高库存滞销风险大•基本款居多,难以满足消费者个性化需求解决方案•GPT+数据洞察,快速反应市场时尚流行趋势•柔性快反+数智化供应链,降......
  • php优化递归算法优化
    2023年8月7日13:59:31因为最近开发自己的一些常用系统,所以为了自由度较高一点,经常分类都是无限层级,所以递归用的比较多,但是发现当分类大于三层,数据1万以上递归就会很慢,所以一直在寻求优化算法,使用使用chagpt优化的算法,基本无法使用,后续想到用php原生函数来使用,结果性能飙升数据......
  • 使用Python中从头开始构建决策树算法
    决策树(DecisionTree)是一种常见的机器学习算法,被广泛应用于分类和回归任务中。并且再其之上的随机森林和提升树等算法一直是表格领域的最佳模型,所以本文将介绍理解其数学概念,并在Python中动手实现,这可以作为了解这类算法的基础知识。在深入研究代码之前,我们先要了解支撑决策树的......