知识点
双指针
解题思路
然后,我们使用两个指针 i 和 j,分别指向数组 time1 和 time2 的起始位置。同时,我们使用一个变量 ans来记录生产时间之和,并初始化为0。
接下来,我们开始合并 time2 到 time1。我们将 time1[i] 和 time2[j] 中较小的一个加入到合并后的数组中,并将较小的数对应的指针向后移动一位。同时,我们将对应的生产时间加到 ans中。
如果其中一个指针已经到达了数组末尾,我们将另一个数组剩余的部分依次加入到合并后的数组中,并将对应的生产时间加到 ans中。
最后,当两个指针都到达了各自数组的末尾时,我们得到了合并后的数组 time1,并且 ans就是合并后的生产时间之和。
Java题解
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param time1 int整型一维数组
* @param time2 int整型一维数组
* @param m int整型
* @param n int整型
* @return int整型
*/
public int milk_sum (int[] time1, int[] time2, int m, int n) {
// write code here
int[] mergedTimes = new int[m + n]; // 合并后的数组
int i = 0;
int j = 0;
int ans = 0;
int k = 0;
while (i < m && j < n) {
if (time1[i] <= time2[j]) {
mergedTimes[k] = time1[i];
ans += time1[i];
i++;
} else {
mergedTimes[k] = time2[j];
ans += time2[j];
j++;
}
k++;
}
while (i < m) {
mergedTimes[k] = time1[i];
ans += time1[i];
i++;
k++;
}
while (j < n) {
mergedTimes[k] = time2[j];
ans += time2[j];
j++;
k++;
}
// 将合并后的数组赋值给 times1
System.arraycopy(mergedTimes, 0, time1, 0, m + n);
return ans;
}
}



京公网安备 11010502036488号