leetcode452用最少数量的箭引爆气球

86 阅读1分钟

452. 用最少数量的箭引爆气球 - 力扣(LeetCode)

思路:首先对给定的集合进行排序,然后依次遍历获取交集,最终得到交集数量即最少引爆气球的箭数 从前往后遍历的过程中,每次都是计算当前元素与前面产生的交集数即为局部的最优解,当遍历完成后即得到全局最优解。由局部最优解得到全局最优解即为贪心的思想。 获取交集:前一个元素的[0],当前元素[0]的最大值作为交集的[0] 前一个元素的[1],当前元素的[1]的最小值作为交集的[1]

/**
 * @param {number[][]} points
 * @return {number}
 */
var findMinArrowShots = function (points) {
    points.sort((a, b) => a[1] - b[1])
    let res = [points[0]]
    let len = points.length
    for (let i = 1; i < len; i++) {
        let temp = res.pop()
        //有交集
        if (temp[1] >= points[i][0]) {
            res.push([Math.max(temp[0], points[i][0]), Math.min(temp[1], points[i][1])])
        } else {
            res.push(temp)
            res.push(points[i])
        }
    }
    return res.length
};
let points = [[10, 16], [2, 8], [1, 6], [7, 12]]
points = [[1, 2], [3, 4], [5, 6], [7, 8]]
console.log(findMinArrowShots(points))