题解 | #牛奶工厂# java
牛奶工厂
https://www.nowcoder.com/practice/264efc6e41394a0286c51eb2521ba386
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 i = m - 1; int j = n - 1; int k = m + n - 1; while (j >= 0) { if (i >= 0 && time1[i] >= time2[j]) { time1[k] = time1[i]; i--; } else { time1[k] = time2[j]; j--; } k--; } int sum = 0; for (int time : time1) { sum += time; } return sum; } }
这道题目涵盖了以下知识点:
- 数组合并和排序
- 双指针
- 循环和条件判断
- 求和
解释代码:
- i 是指向 time1 数组的指针,从后往前遍历,因为数组是非递减排列,从后往前合并可以避免数据覆盖问题。
- j 是指向 time2 数组的指针,同样从后往前遍历。
- k 是指向合并后数组的指针,也从后往前遍历。
- 在每次循环中,比较 time1[i] 和 time2[j] 的值,将较大的值放入合并后数组的末尾,并相应地移动指针。
- 使用循环遍历合并后的数组,计算所有元素的和,然后返回该和作为结果。