LeetCode 56 - Merge Intervals

本文提供了一种解决LeetCode第56和57题的有效算法,通过将输入的区间按起始点排序,然后遍历所有区间进行合并,最终返回合并后的区间列表。代码实现简洁,利用Java 8的Lambda表达式优化了比较器的使用。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值