452. 用最少数量的箭引爆气球

贪心

import java.util.Arrays;
import java.util.Comparator;
import java.util.LinkedList;

class Solution {
    public int findMinArrowShots(int[][] points) {

        /**
         * 对数组排序,按照从小到大的区间
         */
        Arrays.sort(points, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return o1[0] - o2[0];
            }
        });

        /**
         * 将区间放进列表。如果遇到重复的区间,就取交集,否则直接加进来
         * 最后列表的长度就是答案
         */
        LinkedList<int[]> list = new LinkedList<>();

        for (int[] arr : points){

            if (list.isEmpty()){
                list.add(arr);
            }
            else {

                int[] temp = list.getLast();

                if (arr[0] > temp[1] || arr[1] < temp[0]){
                    list.add(arr);
                }
                else {

                    list.removeLast();
                    list.add(new int[]{Math.max(arr[0], temp[0]), Math.min(arr[1], temp[1])});
                }
            }
        }

        return list.size();
    }
}

/**
 * 时间复杂度 O(nlogn)
 * 空间复杂度 O(n)
 */

优化1——不用额外空间记录

import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public int findMinArrowShots(int[][] points) {

        /**
         * 对数组排序,按照从小到大的区间
         * 元素值可能会溢出,使用Integer.compare()方法进行比较
         */
        Arrays.sort(points, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                return Integer.compare(o1[0], o2[0]);
            }
        });

        int count = 1;

        /**
         * 如果后一个区间和前一个区间不重叠,count加1
         * 否则更新这个区间的右边界,取最小值
         */
        for (int i = 1; i < points.length; i++) {

            if (points[i][0] > points[i - 1][1]){
                count++;
            }
            else {
                points[i][1] = Math.min(points[i][1], points[i - 1][1]);
            }
        }

        return count;
    }
}

/**
 * 时间复杂度 O(nlogn)
 * 空间复杂度 O(1)
 */

https://leetcode-cn.com/problems/minimum-number-of-arrows-to-burst-balloons/

posted @ 2022-02-26 15:35  振袖秋枫问红叶  阅读(33)  评论(0)    收藏  举报