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数组中,并返回给调用者。
查看7道真题和解析