Skip to content

Commit fc01070

Browse files
committed
2020-08-22
1 parent c9cc510 commit fc01070

File tree

1 file changed

+16
-37
lines changed

1 file changed

+16
-37
lines changed

1537.最大得分/1537-最大得分.py

+16-37
Original file line numberDiff line numberDiff line change
@@ -5,44 +5,23 @@ def maxSum(self, nums1, nums2):
55
:type nums2: List[int]
66
:rtype: int
77
"""
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)
139

14-
for i, num in enumerate(nums2):
15-
num2idx[num].append(i)
10+
s1 = self.getFragmentedSum(nums1, dups)
11+
s2 = self.getFragmentedSum(nums2, dups)
1612

17-
dups = set()
18-
for key, val in num2idx.items():
19-
if len(val) > 1:
20-
dups.add(key)
21-
22-
num2sum = defaultdict(int)
2313
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)
4716
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

Comments
 (0)