@@ -5,44 +5,23 @@ def maxSum(self, nums1, nums2):
5
5
:type nums2: List[int]
6
6
:rtype: int
7
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 ]
8
+ dups = set (nums1 ) & set (nums2 )
13
9
14
- for i , num in enumerate ( nums2 ):
15
- num2idx [ num ]. append ( i )
10
+ s1 = self . getFragmentedSum ( nums1 , dups )
11
+ s2 = self . getFragmentedSum ( nums2 , dups )
16
12
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
13
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 )
14
+ for sum1 , sum2 in zip (s1 , s2 ):
15
+ res += max (sum1 , sum2 )
47
16
return res % (10 ** 9 + 7 )
48
-
17
+
18
+ def getFragmentedSum (self , nums , dups ):
19
+ l = []
20
+ s = 0
21
+ for num in nums :
22
+ s += num
23
+ if num in dups :
24
+ l .append (s )
25
+ s = 0
26
+ l .append (s )
27
+ return l
0 commit comments