日拱一卒(19)——leetcode学习记录:两个子序列的最大点积

devtools/2024/12/22 23:26:17/

一、题目

给你两个数组 nums1 和 nums2 。

请你返回 nums1 和 nums2 中两个长度相同的 非空 子序列的最大点积。

数组的非空子序列是通过删除原数组中某些元素(可能一个也不删除)后剩余数字组成的序列,但不能改变数字间相对顺序。比方说,[2,3,5] 是 [1,2,3,4,5] 的一个子序列而 [1,5,3] 不是。

二、思路

遇事不决就递归,左脚踩右脚是升天最好的方式。

首先,这道题常规思路找不到解决办法。那么这里我们可以知道nums1和nums2只有一个数的时候,最大内积就是两个元素之积。初值已经解决,那么下一步则是递推关系,f[i][j]是nums1前i个元素的子序列和nums2前j个元素的子序列的子序列最大点积,将f[i][j]转换为前面的历史计算结果,即可找到递推关系。当nums1[i]和nums2[j]组成点积时,f[i][j] = max(f[i-1][j-1],f[i-1]f[j-1]+xij,xij),不组成点积时,f[i][j] = max(f[i-1][j],f[i][j-1]),取两者最大值即可。

三、题解

class Solution:

    def maxDotProduct(self, nums1: List[int], nums2: List[int]) -> int:

        m,n = len(nums1),len(nums2)

        f = [[0]*n for _ in range(m)]

       

        for i in range(m):

            for j in range(n):

                xij = nums1[i]*nums2[j]

                f[i][j] = xij

                if i > 0:

                    f[i][j] = max(f[i][j],f[i-1][j])

                if j > 0:

                    f[i][j] = max(f[i][j],f[i][j-1])

                if i > 0 and j > 0:

                    f[i][j] = max(f[i][j],f[i-1][j-1]+xij)

        return f[m-1][n-1]


http://www.ppmy.cn/devtools/144508.html

相关文章

在 Unity 6 中使用APV为您的世界创建全局照明的新方法(一)

Unity 6 中推出的新照明功能让您能够更快速、更高效的完成对烘焙场景的照明工作,在本文中我们将与大家详细分享在 Unity 6 中应用自适应探针卷创建快速全局光照的更多细节与具体应用方法。由于内容比较丰富,我们将把内容分为三篇文章,以便大家…

【DevOps工具篇】SCM之Gitlab

【DevOps工具篇】SCM之Gitlab 目录 【DevOps工具篇】SCM之Gitlab什么是Git?Git命令有哪些?什么是GitHub?什么是GitLab?GitLab的后期发展为什么使用GitLab?Docker Compose部署GitLab持久化Gitlab数据推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服…

深入解析Ubuntu 20.04 ROS中的setup.bash文件

深入解析Ubuntu 20.04 ROS中的setup.bash文件 在Ubuntu 20.04系统上使用ROS(Robot Operating System)进行机器人软件开发时,setup.bash文件扮演着至关重要的角色。本文将详细解释ROS中的setup.bash文件是什么、其功能和用途、使用方法及其特…

Harmonyos多线程之Worker基本使用

Harmonyos多线程之Worker基本使用 Worker的注意事项创建Worker的注意事项手动创建Worker线程自动创建Worker现成 跨har包加载Worker多级Worker的声明周期管理 Worker和宿主线程的通信 Worker主要作用是为应用程序提供一个多线程的运行环境,可满足应用程序在执行过程…

HTML基本标签详解

HTML基本标签详解 HTML&#xff08;超文本标记语言&#xff09;是构建网页的基础&#xff0c;以下是一些常用的 HTML 基本标签及其详细说明&#xff1a; <html> 定义&#xff1a;整个 HTML 文档的根元素。示例&#xff1a;<html lang"zh"><head> …

Scala快速入门+示例

目录 定义和描述idea基础关键字变量、常量输出数据类型类型转换 函数式编程函数和方法的区别定义示例有参带返回值有参没有返回值 注意点 面向对象object和class的区别对象的属性 快速上手使用版 定义和描述 基于JVM的语言&#xff0c;支持面向对象、面向函数&#xff0c;支持…

Emacs折腾日记(四)——elisp控制结构

目前我们接着学习elisp相关语法&#xff0c;这里我是按照 elisp 简明教程 来进行学习。与其说这是我自己写得教程到不如说是在这个上面做得注释。目前我不知道这样是否侵犯相关的知识产权。目前就先这样继续学习&#xff0c;继续写记录吧。 闲话少说&#xff0c;进入本篇的正题…

【论文阅读】从单张图像到高质量3D模型的快速生成方法

导言 现有的单视角图像生成3D方法存在计算成本高、生成质量不足且缺乏多视角一致性等问题。本文介绍的方法提出了一种新框架&#xff0c;结合多视角2D深度图和RGB图像&#xff0c;通过Stable Diffusion模型生成显式表面几何和纹理。论文强调了深度图在捕捉几何信息方面的优势&…