Skip to content

Commit c9cc510

Browse files
committed
2020-08-22
1 parent 14fe5e8 commit c9cc510

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
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

Comments
 (0)