不相交的线(Lc1035)——动态规划

news2024/11/15 12:42:16

在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。

现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足:

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

请注意,连线即使在端点也不能相交:每个数字只能属于一条连线。

以这种方法绘制线条,并返回可以绘制的最大连线数。

示例 1:

输入:nums1 = [1,4,2], nums2 = [1,2,4]
输出:2
解释:可以画出两条不交叉的线,如上图所示。 
但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。

示例 2:

输入:nums1 = [2,5,1,2,5], nums2 = [10,5,2,1,5,2]
输出:3

示例 3:

输入:nums1 = [1,3,7,1,7,5], nums2 = [1,9,2,5,1]
输出:2

提示:

  • 1 <= nums1.length, nums2.length <= 500
  • 1 <= nums1[i], nums2[j] <= 2000

问题简要描述:返回可以绘制的最大连线数 

细节阐述:

  1. f[i][j] 表示 nums1 前 i 个数和 nums2 前 j 个数的最大连线数

Java

class Solution {
    public int maxUncrossedLines(int[] nums1, int[] nums2) {
        int n = nums1.length, m = nums2.length;
        int[][] f = new int[n + 1][m + 1];
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (nums1[i - 1] == nums2[j - 1]) {
                    f[i][j] = f[i - 1][j - 1] + 1;
                } else {
                    f[i][j] = Math.max(f[i - 1][j], f[i][j - 1]);
                }
            }
        }
        return f[n][m];
    }
}

Python3

class Solution:
    def maxUncrossedLines(self, nums1: List[int], nums2: List[int]) -> int:
        n, m = len(nums1), len(nums2)
        f = [[0] * (m + 1) for _ in range(n + 1)]
        for i, x in enumerate(nums1, 1):
            for j, y in enumerate(nums2, 1):
                if nums1[i - 1] == nums2[j - 1]:
                    f[i][j] = f[i - 1][j - 1] + 1
                else:
                    f[i][j] = max(f[i - 1][j], f[i][j - 1])
        return f[n][m]

TypeScript

function maxUncrossedLines(nums1: number[], nums2: number[]): number {
    let n = nums1.length, m = nums2.length;
    let f: number[][] = Array.from({length: n + 1}, () => Array(m + 1).fill(0));
    for (let i = 1; i <= n; i++) {
        for (let j = 1; j <= m; j++) {
            if (nums1[i - 1] == nums2[j - 1]) {
                f[i][j] = f[i - 1][j - 1] + 1;
            } else {
                f[i][j] = Math.max(f[i - 1][j], f[i][j - 1]);
            }
        }
    }
    return f[n][m];  
};

C++

class Solution {
public:
    int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
		int n = nums1.size(), m = nums2.size();
		int f[n + 1][m + 1];
		memset(f, 0, sizeof(f));
		for (int i = 1;i <= n;i++) {
			for (int j = 1;j <= m;j++) {
				if (nums1[i - 1] == nums2[j - 1]) {
					f[i][j] = f[i - 1][j - 1] + 1;
				} else {
					f[i][j] = max(f[i - 1][j], f[i][j - 1]);
				}
			}
		}
		return f[n][m];
    }
};

Go

func maxUncrossedLines(nums1 []int, nums2 []int) int {
	n, m := len(nums1), len(nums2)
	f := make([][]int, n+1)
	for i := range f {
		f[i] = make([]int, m+1)
	}
	for i := 1; i <= n; i++ {
		for j := 1; j <= m; j++ {
			if nums1[i-1] == nums2[j-1] {
				f[i][j] = f[i-1][j-1] + 1
			} else {
				f[i][j] = max(f[i-1][j], f[i][j-1])
			}
		}
	}
	return f[n][m]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文翻译:ChatGPT passing USMLE shines a spotlight on the flaws of medical education

ChatGPT passing USMLE shines a spotlight on the flaws of medical education https://journals.plos.org/digitalhealth/article?id10.1371/journal.pdig.0000205 ChatGPT 通过美国执业医师执照考试&#xff08;USMLE&#xff09;凸显了医学教育的缺陷 阿马拉奇B姆巴克韦1…

你不知道的100个国外搜索引擎升级版

首先是要支持国产品牌磁力狐&#xff0d;cilih.com DMOZ – 一个多语种、开放式网站目录。 Food Blog Search -可以让你从上千个博客和网站查找菜谱。 Swoogle – 一个语义、文件、术语和数据的搜索引擎&#xff0c;不同于普通的搜索引擎。 SimilarSiteSearch – 帮你找到相似…

排序------快速排序(C语言实现)

目录 快速排序算法 例题 题目描述 具体代码&#xff1a; 代码分析 函数定义&#xff1a; 主函数&#xff1a; 快速排序算法 快速排序&#xff08;QuickSort&#xff09;是一种高效的排序算法&#xff0c;它采用分治策略&#xff0c;通过选择一个“基准”元素并将其他元素…

计算机网络面试真题总结(五)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 说一说HTTP1.0&#xff0c;1.1&#xff0c;2.0 的区别 HTTP/1.0 H…

国际篮球联合会(FIBA)标准篮球比赛记录表

相关资源 下载地址>>https://download.csdn.net/download/boomcode/89675132 篮球比赛计时计分展示管理系统开发及使用手册>>

3D渐变的轮播图效果,有点儿意思!

阅读原文&#xff1a;原文地址 一、前言 在Web开发中&#xff0c;轮播图&#xff08;Carousel&#xff09;是一种非常常见的功能&#xff0c;用于展示图片或内容&#xff0c;通过自动或手动的方式切换不同的视图&#xff0c;在网页设计中扮演着重要的角色。 吸引注意力&…

用Python给英语单词批量划分音节

一、问题的缘起 最近&#xff0c;有网友在我的视频下面留言&#xff0c;问我可否把英语单词进行音节的划分&#xff1f;我以前也有同样的想法&#xff0c;但是始终没有得到解决。但是&#xff0c;我想使用python&#xff0c;学习英语的人都很多&#xff0c;说不定有人已经编写…

微信左滑删除聊天记录怎么恢复?记录找回秘籍,第一种更有效!

在日常的指尖滑动间&#xff0c;微信成为了我们生活中不可或缺的一部分&#xff0c;记录着与朋友、家人的温馨对话&#xff0c;以及工作中的重要信息。然而&#xff0c;当不小心的向左滑动&#xff0c;珍贵的聊天记录就会悄然消失。那么&#xff0c;微信左滑删除聊天记录怎么恢…

给儿童掏耳朵用什么工具好?2024四款精品合集汇总

在为儿童掏耳朵时&#xff0c;选择合适的工具非常重要。普通的金属挖耳勺太过坚硬&#xff0c;容易弄伤儿童脆弱的耳道&#xff0c;并不适合。柔软的小棉签虽然相对安全一些&#xff0c;但也只能清理外耳道比较浅处的耳垢&#xff0c;而且若使用不当同样存在风险。 相比之下&am…

大数据驱动的数字化营销策略,开启营销新征程

​在当今这个数字化时代&#xff0c;大数据正以崭新的大力量重塑着企业的营销策略。今天&#xff0c;就让我们一同深入探讨大数据驱动的数字化营销策略究竟有着怎样的魅力。用蚓链获数据资产&#xff0c;享大数据福利&#xff01; 大数据&#xff0c;精准定位目标客户的神器。…

【FPGA】HDMI参数信息汇总

文章列举已知大部分个人电脑屏幕尺寸信息&#xff0c;主要包括720p 1080p 2k 1440p 4k 5k以及8k屏幕。屏幕水平一行包括同步脉冲、后沿间隔、活跃像素、前沿间隔&#xff1b;屏幕垂直包括同步脉冲、后沿间隔、活跃行数、前沿间隔。 1. 720p (1280x720) 水平总像素 (HSYNC): 16…

element-plus 新增一行合计。除了用summary-method还可以用append的插槽

:summary-method"getSummaries" <el-table:data"reformtableData"style"width: 100%"show-summary:summary-method"getSummaries"ref"reformtableRef" > <el-table-column label"序号" type"index…

ArcGIS中怎么批量计算多个点到线最近距离,以及这些点到线的纬度差?

最近&#xff0c;我接到了一个关于批量计算多个点到线最近距离&#xff0c;以及这些点到线的纬度差的咨询。 下面是我对这个问题的解决思路&#xff1a; 先解决的如何计算是纬度差的问题&#xff0c;因为纬度差直接在地理坐标系下计算即可。 1,第一步对线要素转折点 2.接着在…

AI赚钱秘籍:如何利用大模型在2024年轻松月入过万?

随着人工智能技术的飞速发展&#xff0c;大模型已成为推动行业革新的重要力量。2024年&#xff0c;利用大模型技术月入过万已不再是遥不可及的梦想。本文将揭示AI赚钱的秘籍&#xff0c;帮助您在新的一年里通过大模型技术轻松实现月入过万的目标。 一、大模型技术概述 大模型技…

录屏怎么把声音录进去?三个方法让你告别无声录屏!

在数字化交流日益频繁的今天&#xff0c;录屏已经成为我们工作、学习及娱乐中不可或缺的一部分。然而&#xff0c;许多人在录屏时常常发现&#xff0c;尽管画面清晰&#xff0c;但声音却未能同步录制&#xff0c;这极大地影响了视频的完整性和观赏性。别担心&#xff0c;今天我…

超易企业管理系统 ajax/Login.ashx SQL注入致RCE漏洞复现

0x01 产品简介 超易软件作为一家专业从事企业管理软件的高新技术企业,其核心产品超易企业管理系统覆盖了企业日常运营的多个方面,包括进销存管理、仓库管理、销售管理、固定资产管理、人事管理等多个模块。这些模块相互关联,共同构成了一个全面的企业管理解决方案。 0x02 …

示波器输出的csv文件如何转换为频谱图及其excel表格(频率与幅值)

示波器输出的CSV文件通常包含的是采样的时域信号数据&#xff0c;而不是直接的频率和幅度信息。这个文件一般包括时间&#xff08;Time&#xff09;和电压&#xff08;Voltage&#xff09;两列&#xff0c;记录了电压随时间变化的情况。 要从这些时域数据中得到频率和幅度的变…

chapter08-面向对象编程(super)day09

目录 298-super基本语法 299-super使用细节1 300-super使用细节2 301-super使用细节3 298-super基本语法 1、可以访问父类的属性&#xff0c;但是不能访问父类的private属性 2、可以访问父类的方法&#xff0c;但不能访问父类的private方法 3、访问父类的构造器&#xff1a;…

并联去耦电容的反谐振

1 串联谐振与并联谐振 并联谐振是一种电流谐振现象&#xff0c;其中电容器&#xff08;C&#xff09;和电感器&#xff08;L&#xff09;上的电流相互交换&#xff0c;形成谐振状态。在谐振时&#xff0c;电容器和电感器上的电流对外交换为零&#xff0c;电路呈现开路状态&…

文献阅读:Pathway Ensemble Tool癌症途径和治疗法的无偏发现

介绍 正确地识别生物途径的扰动是揭示基本疾病机制和发展急需的治疗策略的关键步骤。然而&#xff0c;目前的工具是否最优化用于无偏发现相关途径仍然不清楚。在这里&#xff0c;我们创建了“基准测试”&#xff08;Benchmark&#xff09;来严格评估现有工具&#xff0c;并发现…