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
数组中,并返回给调用者。