1
+ class Solution (object ):
2
+ def maxSum (self , nums1 , nums2 ):
3
+ """
4
+ :type nums1: List[int]
5
+ :type nums2: List[int]
6
+ :rtype: int
7
+ """
8
+ from collections import defaultdict
9
+ from heapq import *
10
+ num2idx = defaultdict (list )
11
+ for i , num in enumerate (nums1 ):
12
+ num2idx [num ] = [i ]
13
+
14
+ for i , num in enumerate (nums2 ):
15
+ num2idx [num ].append (i )
16
+
17
+ dups = set ()
18
+ for key , val in num2idx .items ():
19
+ if len (val ) > 1 :
20
+ dups .add (key )
21
+
22
+ num2sum = defaultdict (int )
23
+ res = 0
24
+ queue = [(- nums1 [- 1 ], len (nums1 ) - 1 , 0 , 1 ), (- nums2 [- 1 ], len (nums2 ) - 1 , 0 , 2 )]
25
+ heapify (queue )
26
+ while queue :
27
+ val , idx , s , flag = heappop (queue )
28
+ val = - val
29
+
30
+ if flag == 1 and idx + 1 < len (nums1 ) and nums1 [idx + 1 ] in dups :
31
+ s = max (num2sum [nums1 [idx + 1 ]], s )
32
+ elif flag == 2 and idx + 1 < len (nums2 ) and nums2 [idx + 1 ] in dups :
33
+ s = max (num2sum [nums2 [idx + 1 ]], s )
34
+
35
+ if val in dups :
36
+ s = max (num2sum [val ], s + val )
37
+ num2sum [val ] = max (s , num2sum [val ])
38
+ else :
39
+ s += val
40
+
41
+ if idx :
42
+ if flag == 1 :
43
+ heappush (queue , (- nums1 [idx - 1 ], idx - 1 , s , 1 ))
44
+ else :
45
+ heappush (queue , (- nums2 [idx - 1 ], idx - 1 , s , 2 ))
46
+ res = max (res , s )
47
+ return res % (10 ** 9 + 7 )
48
+
0 commit comments