LeetCode 56 - Merge Intervals

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大神级别已经此生无望,能达到左程云的程度也悬,能追上湘神的脚步我就知足啦!

发布了11 篇原创文章 · 获赞 2 · 访问量 665

猜你喜欢

转载自blog.csdn.net/liheng301/article/details/105001718
今日推荐