题目来源: LeetCode 75 面试经典 150 题
435. 无重叠区间
思路
贪心算法,先按区间右端点从小到大排序,每次寻找右端点在首个区间右端点左侧的新区间,将首个区间替换成该区间。当无法替换时,首个区间就是所有可以选择的区间中右端点最小的那个区间
代码
js
/**
* @param {number[][]} intervals
* @return {number}
*/
var eraseOverlapIntervals = function(intervals) {
if (!intervals.length) {
return 0
}
intervals.sort((a, b) => a[1] - b[1])
let right = intervals[0][1]
let res = 1
for (let i = 1; i < intervals.length; i++) {
if (intervals[i][0] >= right) {
res++
right = intervals[i][1]
}
}
return intervals.length - res
};
452. 用最少数量的箭引爆气球
思路
按右端点升序排序,以第一个区间的右端点为起点,每次寻找下一个区间的左端小于当前端点的区间,不重合弓箭数加一,最后返回弓箭数。
代码
js
/**
* @param {number[][]} points
* @return {number}
*/
var findMinArrowShots = function(points) {
points.sort((a, b) => a[1] - b[1])
let i = 0
let result = 0
while(i <points.length) {
const right = points[i][1]
i++
while(i < points.length && points[i][0] <= right) {
i++
}
result++
}
return result
};
274. H 指数
思路
排序法,将数组从大到小排序,每当找到大于当前 h 指数的论文,h 加一,最后返回 h 值
代码
js
/**
* @param {number[]} citations
* @return {number}
*/
var hIndex = function(citations) {
citations.sort((a, b) => a - b)
let h = 0
let i = citations.length - 1
while (i >= 0 && citations[i] > h) {
h++
i--
}
return h
};
本文完,感谢阅读。