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] 的值,将较大的值放入合并后数组的末尾,并相应地移动指针。
- 使用循环遍历合并后的数组,计算所有元素的和,然后返回该和作为结果。

京公网安备 11010502036488号