Skip to content

Commit b3f28c7

Browse files
committed
Runtime: 84 ms (Top 60.79%) | Memory: 56.00 MB (Top 84.58%)
1 parent 7c5cf4c commit b3f28c7

File tree

1 file changed

+25
-110
lines changed

1 file changed

+25
-110
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,117 +1,32 @@
1-
#define ll long long
1+
// Runtime: 84 ms (Top 60.79%) | Memory: 56.00 MB (Top 84.58%)
2+
23
class Solution {
34
public:
4-
ll dp1[100005];
5-
ll dp2[100005];
6-
7-
ll mod=1e9+7;
8-
9-
ll func(vector<int> &nums1 , vector<int> &nums2 , unordered_map< int , int> &mp1,
10-
unordered_map< int , int> &mp2 , int i1 , int i2 , int n1 , int n2 , bool f1)
11-
{
12-
if(i1>=n1 || i2>=n2)
13-
{
14-
return 0;
15-
}
16-
17-
ll sum1=0;
18-
19-
ll sum2=0;
20-
21-
ll ans=0;
22-
23-
if(f1==true)
24-
{
25-
if(dp1[i1]!=-1)
26-
{
27-
return dp1[i1];
28-
}
29-
}
30-
else
31-
{
32-
if(dp2[i2]!=-1)
33-
{
34-
return dp2[i2];
35-
}
36-
}
37-
38-
if(f1==true)
39-
{
40-
sum1=(sum1 + nums1[i1]);
41-
auto it=mp2.find(nums1[i1]);
42-
43-
sum1=(sum1 + func(nums1 , nums2 , mp1 , mp2 , i1+1 , i2 , n1 , n2 , true));
44-
45-
if(it!=mp2.end())
46-
{
47-
int idx=mp2[nums1[i1]];
48-
sum2=(sum2 + nums2[idx]);
49-
50-
sum2=(sum2 + func(nums1 , nums2 , mp1 , mp2 , i1 , idx+1 , n1 , n2 , false ));
51-
52-
}
53-
ans=max(sum1 , sum2);
54-
55-
dp1[i1]=ans;
56-
}
57-
else
5+
int maxSum(vector<int>& nums1, vector<int>& nums2) {
6+
int mod=1e9+7;
7+
long long int ans=0, sum1=0, sum2=0;
8+
int i=0, j=0;
9+
while(i<nums1.size() and j<nums2.size())
5810
{
59-
sum2=(sum2 + nums2[i2]);
60-
auto it=mp1.find(nums2[i2]);
61-
62-
sum2=(sum2 + func(nums1 , nums2 , mp1 , mp2 , i1 , i2+1 , n1 , n2 , false));
63-
64-
if(it!=mp1.end())
11+
if(nums1[i] < nums2[j])
12+
sum1 += nums1[i++];
13+
else if(nums1[i] > nums2[j])
14+
sum2 += nums2[j++];
15+
else
6516
{
66-
int idx=mp1[nums2[i2]];
67-
sum1= (sum1 + nums1[idx]);
68-
sum1=(sum1 + func(nums1 , nums2 , mp1 , mp2 , idx+1 , i2 , n1 , n2 , true));
17+
ans += nums1[i] + max(sum1, sum2);
18+
i++;
19+
j++;
20+
sum1=0;
21+
sum2=0;
6922
}
70-
ans=max(sum1 , sum2);
71-
dp2[i2]=ans;
72-
}
73-
74-
75-
return ans;
76-
77-
78-
}
79-
80-
int maxSum(vector<int>& nums1, vector<int>& nums2) {
81-
82-
// at every equal value we can switch
83-
84-
// the elements from array1 to array2
85-
86-
unordered_map< int , int> mp1 , mp2;
87-
88-
int n1=nums1.size() , n2=nums2.size();
89-
90-
for(int i=0;i<nums1.size();i++)
91-
{
92-
mp1[nums1[i]]=i;
93-
}
94-
95-
for(int i=0;i<nums2.size();i++)
96-
{
97-
mp2[nums2[i]]=i;
9823
}
99-
100-
// start from both array as nums1 & nums2 , nums2 & nums1
101-
102-
memset(dp1 , -1 , sizeof(dp1));
103-
memset(dp2 , -1 , sizeof(dp2));
104-
105-
bool f1=true;
106-
107-
ll ans1=func(nums1 , nums2 , mp1 , mp2 , 0 , 0 ,n1 , n2 , f1);
108-
memset(dp1 , -1 , sizeof(dp1));
109-
memset(dp2 , -1 , sizeof(dp2));
110-
ll ans2=func(nums2 , nums1 , mp2 , mp1 , 0 , 0 , n2 , n1 , f1);
111-
112-
ans1=ans1%mod;
113-
ans2=ans2%mod;
114-
115-
return max(ans1 , ans2);
116-
24+
while(i<nums1.size())
25+
sum1 += nums1[i++];
26+
while(j<nums2.size())
27+
sum2 += nums2[j++];
28+
ans += max(sum1, sum2);
29+
ans = ans%mod;
30+
return (int)ans;
11731
}
32+
};

0 commit comments

Comments
 (0)