1537. 最大得分
状态:超时
解法:双指针
代码:双指针
class Solution {
public:
int maxSum(vector<int>& nums1, vector<int>& nums2) {
long sum1 = 0, sum2 = 0;
long res = 0;
int i = 0, j = 0;
while(i < nums1.size() && j < nums2.size()){
if(nums1[i] == nums2[j]){
sum1 = (max(sum1, sum2) + nums1[i]);
sum2 = sum1;
i++;
j++;
}
else if(nums1[i] < nums2[j]){
sum1 += nums1[i];
i++;
}
else{
sum2 += nums2[j];
j++;
}
}
while(i < nums1.size()){
sum1 += nums1[i];
i++;
}
while(j < nums2.size()){
sum2 += nums2[j];
j++;
}
res = max(sum1, sum2);
return res % ((int)pow(10, 9) + 7 );
}
};
超时代码:
class Solution {
public:
int max;
int maxSum(vector<int>& nums1, vector<int>& nums2) {
max = 0;
dfs(nums1,0,nums2,0,0,1);
dfs(nums1,0,nums2,0,0,2);
return max;
}
void dfs(vector<int>& nums1, int i, vector<int>& nums2, int j,int sum, int flag){
if(i==nums1.size() && flag == 1)
return;
if(j == nums2.size() && flag == 2)
return;
int k;
if(flag == 1){
for(k = j;k<nums2.size();k++)
if(nums1[i] == nums2[k])
break;
sum = (sum +nums1[i]) % 1000000007;
if((i == nums1.size() - 1 && k == nums2.size()) || (i == nums1.size() - 1 && j == nums2.size() - 1)){
if(sum > max) max = sum;
}else if(k == nums2.size()){
dfs(nums1,i+1,nums2,j,sum,flag);
}else if(k < nums2.size()){
dfs(nums1,i+1,nums2,j,sum,1);
dfs(nums1,i+1,nums2,k+1,sum,2);
}
}else if(flag == 2){
for(k = i;k<nums1.size();k++)
if(nums2[j] == nums1[k])
break;
sum = (sum +nums2[j]) % 1000000007;
if((j == nums2.size() - 1 && k == nums1.size()) || (j == nums2.size() - 1 && i == nums1.size() - 1)){
if(sum > max) max = sum;
}else if(k == nums1.size()){
dfs(nums1,i,nums2,j+1,sum,flag);
}else if(k < nums1.size()){
dfs(nums1,k+1,nums2,j+1,sum,1);
dfs(nums1,i,nums2,j+1,sum,2);
}
}
}
};