Leetcode 435. 无重叠区间——Java解题思路解析

本文详细解析LeetCode 435题,通过Java实现无重叠区间的贪心算法解法。首先对区间按右边界排序,然后检查每个区间的右边界是否与下一个区间的左边界重合,以找到无重叠的最大子数组。此外,还提供了动态规划解法的链接供读者参考。
摘要由CSDN通过智能技术生成

Leetcode 435. 无重叠区间——Java解题思路解析

本题是使用了贪心算法,结合Arrays.sort的重载方法


一、题目描述

题目描述
给定多个区间,计算让这些区间互不重叠所需要移除区间的最少个数。起止相连不算重叠。
输入输出样例
输入是一个数组,数组由多个长度固定为 2 的数组组成,表示区间的开始和结尾。输出一个整数,表示需要移除的区间数量。

Input: [[1,2], [2,4], [1,3]]
Output: 1

在这个样例中,我们可以移除区间 [1,3],使得剩余的区间 [[1,2], [2,4]] 互不重叠。

二、思路

1. 贪心算法

贪心算法简单,解题分为两步:先对二维数组按照右区间进行排序;再比较当前区间右区间与下一个区间的左区间是否重合,即得出区间不重复的最大数组。
首先对二维数组按照右区间进行排序:

Arrays.sort(intervals, new Comparator<int[]>() {
   
            public int compare(int[] intervals1, int[] intervals2){
   
                    return intervals1[1] - intervals2[1];
            }
        });

这里是Arrays.sort重载的方法,详情可以查看以下链接:
Arrays.sort()详解:https://www.cnblogs.com/SupremeBoy/p/12717532.html

接着按当前区间右区间与下一个区间的左区间进行比较,没有交集即证明当前右区间小于下一个区间左区间。代码如下:

int right = intervals[0][1];
        int num = 1;
        for(int i = 1; i < intervals.length; i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值