Java 题解 | #奶牛喂养时间#

奶牛喂养时间

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 == 0) {
            return new int[][] {};
        }

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

        List<int[]> merged = new ArrayList<>();
        for (int[] interval : intervals) {
            if (merged.isEmpty() || merged.get(merged.size() - 1)[1] < interval[0]) {
                merged.add(interval);
            } else {
                merged.get(merged.size() - 1)[1] = Math.max(merged.get(merged.size() - 1)[1],
                                                   interval[1]);
            }
        }

        int[][] result = new int[merged.size()][2];
        for (int i = 0; i < merged.size(); i++) {
            result[i] = merged.get(i);
        }

        return result;
    }
}

编程语言是Java。

该题考察的知识点是合并区间。

对区间按照起始时间进行升序排序,使用Arrays.sort方法。然后创建一个List<int[]> merged来存储合并后的区间。

遍历已排序的区间数组intervals,对每个区间进行合并判断。如果merged列表为空或者merged列表中最后一个区间的结束时间小于当前区间的起始时间,则直接将当前区间添加到merged列表中;否则更新merged列表中最后一个区间的结束时间为当前区间的结束时间和已有结束时间中的较大者。

merged列表转换为二维整数数组int[][] result,并作为结果返回。经过合并后的区间就存储在result数组中,并返回给调用者。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
仁者伍敌:牛子这些人还会点一个自动回复,boss都不带回复的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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