AC Solution
class Solution {
public int[][] merge(int[][] intervals) {
if (intervals == null || intervals.length <= 1) {
return intervals;
}
Arrays.sort(intervals, (i1, i2) -> Integer.compare(i1[0], i2[0]));
List<int[]> result = new ArrayList<>();
int[] tmpInterval = intervals[0];
result.add(tmpInterval);
for (int[] interval : intervals) {
if (interval[0] <= tmpInterval[1]) {
tmpInterval[1] = Math.max(tmpInterval[1], interval[1]);
} else {
tmpInterval = interval;
result.add(tmpInterval);
}
}
return result.toArray(new int[result.size()][]);
}
}
总结与反思
LeetCode 56 & 57 函数接口改了,改成了二维数组。本题算法难度不大,重点考察coding功底,bug-free 并且clean and beautiful 并不容易。本题还有一点要注意,自从Java 8以后,应使用lambda表达式在面试时明显可节省时间,是时候抛弃Comparator
了。
今晚听了九章讲解头条2020春招的笔试题,ACM金牌大佬确实是举重若轻,对各种算法信手拈来,对于我这种菜鸡选手需要不断总结+练习。有一点日常多加注意就可以不丢分,就是变量命名,作为一个有~2年工作经验的社招,再用i,j这种很容易被鄙视,当然for循环还是可以用的。还有就是复杂函数可以拆分,写一个巨长无比的函数未必好看。ACM大神级别已经此生无望,能达到左程云的程度也悬,能追上湘神的脚步我就知足啦!