每日一题:最大得分
题意
给定两个严格递增数组,从任意一个数组出发到任意一个数组结束,当遇到相同元素时可以切换到另一个数组,只能从左到右走且每个数只计算一次,求最大累计得分。
Solution
当遇到两个数组都有的元素时可以切换,那其实从上一次遇到相同到这一次,假设中间这部分元素和是 $sum$,无非是看到底是上面这部分的 $sum$ 更大还是下面的 $sum$ 更大,然后选走罢了,如此循环下去。至于判断相同元素,提前用map记录每个元素的位置就好了。时间复杂度$O(n)$。
比如:
$nums1: [2, 4, 5, 8, 10]$
$nums2: [4, 6, 8, 9]$
首先第一部分(从起点开始,碰到第一次相同)是 $sum1(nums1[2, 4]) = 6$, $sum2(nums2[4]) = 4$,选择 $max(sum1, sum2) = 6$
第二部分(第二次相同)是 $sum1(nums1[5, 8]) = 13$, $sum2(nums2[6, 8]) = 14$,选择 $max(sum1, sum2) = 14$
第三部分(一直循环到结尾也没再发现相同元素,换不了路线,故只能一直走到终点)是 $sum1(nums1[10]) = 10$, $sum2(nums2[9]) = 9$,选择 $max(sum1, sum2) = 10$
故答案为 $6 + 14 + 10 = 20$
Code
1 | class Solution { |