LeetCode 题解工作台
最大得分
你有两个 有序 且数组内元素互不相同的数组 nums1 和 nums2 。 一条 合法路径 定义如下: 选择数组 nums1 或者 nums2 开始遍历(从下标 0 处开始)。 从左到右遍历当前数组。 如果你遇到了 nums1 和 nums2 中都存在的值,那么你可以切换路径到另一个数组对应数字处继…
4
题型
5
代码语言
3
相关题
当前训练重点
困难 · 状态·转移·动态规划
答案摘要
class Solution: def maxSum(self, nums1: List[int], nums2: List[int]) -> int:
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 状态·转移·动态规划 题型思路
题目描述
你有两个 有序 且数组内元素互不相同的数组 nums1 和 nums2 。
一条 合法路径 定义如下:
- 选择数组
nums1或者nums2开始遍历(从下标 0 处开始)。 - 从左到右遍历当前数组。
- 如果你遇到了
nums1和nums2中都存在的值,那么你可以切换路径到另一个数组对应数字处继续遍历(但在合法路径中重复数字只会被统计一次)。
得分 定义为合法路径中不同数字的和。
请你返回 所有可能 合法路径 中的最大得分。由于答案可能很大,请你将它对 10^9 + 7 取余后返回。
示例 1:

输入:nums1 = [2,4,5,8,10], nums2 = [4,6,8,9] 输出:30 解释:合法路径包括: [2,4,5,8,10], [2,4,5,8,9], [2,4,6,8,9], [2,4,6,8,10],(从 nums1 开始遍历) [4,6,8,9], [4,5,8,10], [4,5,8,9], [4,6,8,10] (从 nums2 开始遍历) 最大得分为上图中的绿色路径 [2,4,6,8,10] 。
示例 2:
输入:nums1 = [1,3,5,7,9], nums2 = [3,5,100] 输出:109 解释:最大得分由路径 [1,3,5,100] 得到。
示例 3:
输入:nums1 = [1,2,3,4,5], nums2 = [6,7,8,9,10] 输出:40 解释:nums1 和 nums2 之间无相同数字。 最大得分由路径[6,7,8,9,10]得到。
提示:
1 <= nums1.length, nums2.length <= 1051 <= nums1[i], nums2[i] <= 107nums1和nums2都是严格递增的数组。
解题思路
方法一
class Solution:
def maxSum(self, nums1: List[int], nums2: List[int]) -> int:
mod = 10**9 + 7
m, n = len(nums1), len(nums2)
i = j = 0
f = g = 0
while i < m or j < n:
if i == m:
g += nums2[j]
j += 1
elif j == n:
f += nums1[i]
i += 1
elif nums1[i] < nums2[j]:
f += nums1[i]
i += 1
elif nums1[i] > nums2[j]:
g += nums2[j]
j += 1
else:
f = g = max(f, g) + nums1[i]
i += 1
j += 1
return max(f, g) % mod
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | Depends on the final approach |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Look for an understanding of dynamic programming concepts and efficient state transitions.
- question_mark
Expect the candidate to discuss the trade-off between path choices at common elements.
- question_mark
Be aware of the candidate's ability to handle edge cases, such as no common elements between the arrays.
常见陷阱
外企场景- error
Failing to properly handle state transitions when encountering common elements.
- error
Using brute-force methods without leveraging dynamic programming to optimize the solution.
- error
Overcomplicating the problem by neglecting the efficient partitioning of the arrays based on common values.
进阶变体
外企场景- arrow_right_alt
Modify the problem to allow multiple common values between the arrays.
- arrow_right_alt
Change the problem to consider non-strictly increasing arrays.
- arrow_right_alt
Introduce a limit on the number of common elements to explore how the solution adapts.