一、题目描述
题目连接:https://leetcode-cn.com/problems/get-the-maximum-score/
二、题目分析
题解参考:https://leetcode-cn.com/problems/get-the-maximum-score/solution/java-double-points-by-carl-x-2/
这道题好妙啊,虽然第一眼就觉得使用双指针,但是不知道从哪下手,看了题解后,妙啊妙啊。
这道题的关键在于两个数组如果有元素相同,就可以选择切换到另外一个数组,那么我们可以用两个count来计算从nums1和nums2分别走到这个相同元素时的累计和,然后我们取比较大的那个作为我们前面走的路。这里要好好体会一下。然后更新两个count为相同的最大值。
三、代码
public int maxSum(int[] nums1, int[] nums2) {
int MOD = (int) (1e9+7);
long count1 = 0;
long count2 = 0;
int index1 = 0;
int index2 = 0;
while (index1 < nums1.length && index2 < nums2.length) {
if (nums1[index1] < nums2[index2]) {
count1 += nums1[index1++];
} else if (nums1[index1] > nums2[index2]){
count2 += nums2[index2++];
} else {
count1 = Math.max(count1,count2) + nums1[index1];
count2 = count1;
++index1;
++index2;
}
}
while (index1 < nums1.length) {
count1 += nums1[index1++];
}
while (index2 < nums2.length) {
count2 += nums2[index2++];
}
return (int) (Math.max(count1,count2) % MOD);
}