题解 | #牛奶工厂# 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;
    }
}

这道题目涵盖了以下知识点:

  1. 数组合并和排序
  2. 双指针
  3. 循环和条件判断
  4. 求和

解释代码:

  • i 是指向 time1 数组的指针,从后往前遍历,因为数组是非递减排列,从后往前合并可以避免数据覆盖问题。
  • j 是指向 time2 数组的指针,同样从后往前遍历。
  • k 是指向合并后数组的指针,也从后往前遍历。
  • 在每次循环中,比较 time1[i] 和 time2[j] 的值,将较大的值放入合并后数组的末尾,并相应地移动指针。
  • 使用循环遍历合并后的数组,计算所有元素的和,然后返回该和作为结果。
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务