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);}}}};
