题解 | #奶牛喂养时间#

奶牛喂养时间

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 列表转换为数组,并返回合并后的时间区间数组。

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务