LeetCode刷题---用最少数量的箭引爆气球

发布时间:2024年01月05日

在这里插入图片描述
在这里插入图片描述
解题思路:

该题使用贪心的思想来获取局部最优解
首先对原始区间数组按照每个区间的第一个元素(start)来进行排序。
创建一个List用于存储遍历后的区间,先将排序后的数组的第一个元素加入到List中,之后开始遍历数组。如果第二个区间的start大于第一个区间的end,则证明两个区间不重叠,直接将当前区间加入到List中,如果第二个区间的start小于或等于第一个区间的end,那么两个区间重叠,此时将两个区间合并,合并后的区间的start为第一个区间的start,end为两个区间的最小end,再将合并后的区间加入到List中。
最终遍历结束后,List的size即为所需要的最小弓箭数量。

代码实现:

public int findMinArrowShots(int[][] points) {
        
        List<int[]> pointsList=new ArrayList<>();

        //先对原始数组按照第一个元素进行排序
        Arrays.sort(points, Comparator.comparingInt(p -> p[0]));
        pointsList.add(points[0]);
        for(int i=1;i<points.length;i++)
        {
            //如果下一个区间的start小于上一个区间的end,则证明两个区间重叠
            if(points[i][0]<=pointsList.get(pointsList.size()-1)[1])
            {
                //两个区间重叠,需要合并,合并后的新区间的end为两个区间最小的end
                pointsList.get(pointsList.size()-1)[1]=Math.min(pointsList.get(pointsList.size()-1)[1],points[i][1]);
            }
            else
            {
                //不重叠,直接添加
                pointsList.add(points[i]);
            }
        }

        return pointsList.size();
    }
文章来源:https://blog.csdn.net/weixin_47109902/article/details/135410696
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。