题解 | #奶牛喂养时间#

奶牛喂养时间

https://www.nowcoder.com/practice/db2c7c52df0449b49b36e7fe5364f521

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param intervals int整型二维数组
     * @return int整型二维数组
     */
    public int[][] mergeTimeIntervals (int[][] intervals) {
        // write code here
        if (intervals == null || intervals.length <= 1) {
            return intervals;
        }

        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);

        List<int[]> merged = new ArrayList<>();
        int[] currentInterval = intervals[0];

        for (int i = 1; i < intervals.length; i++) {
            if (intervals[i][0] <= currentInterval[1]) {
                currentInterval[1] = Math.max(currentInterval[1], intervals[i][1]);
            } else {
                merged.add(currentInterval);
                currentInterval = intervals[i];
            }
        }

        merged.add(currentInterval);

        return merged.toArray(new int[merged.size()][]);
    }
}

Java 编程语言编写的。

该题考察的知识点包括:

  1. 数组排序
  2. 贪心算法
  3. 二维数组

代码的文字解释:

首先对输入的时间区间数组 intervals 进行排序,以确保相邻的区间能够更容易地合并。

创建 merged ,用于存储合并后的时间区间。

初始化 currentInterval 为排序后的第一个时间区间。随后,我们遍历排序后的数组,对于每个时间区间,分两种情况:

  1. 如果当前时间区间的开始时刻小于等于 currentInterval 的结束时刻,说明有重叠,我们更新 currentInterval 的结束时刻为当前时间区间的结束时刻和 currentInterval 的结束时刻的最大值。
  2. 如果当前时间区间的开始时刻大于 currentInterval 的结束时刻,说明没有重叠,我们将 currentInterval 添加到 merged 列表中,并将 currentInterval 更新为当前时间区间。

还需要将最后一个 currentInterval 添加到 merged 列表中,因为遍历完成后最后一个时间区间没有机会被添加。将 merged 列表转换为数组,并返回合并后的时间区间数组。

全部评论

相关推荐

03-10 20:17
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务