题解 | #牛奶工厂#
牛奶工厂
https://www.nowcoder.com/practice/264efc6e41394a0286c51eb2521ba386
知识点
双指针
解题思路
然后,我们使用两个指针 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; } }