30天刷题挑战(二十六)

题目来源: 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
};

本文完,感谢阅读。

相关推荐
甜兒.19 分钟前
鸿蒙小技巧
前端·华为·typescript·harmonyos
little redcap1 小时前
第十九次CCF计算机软件能力认证-乔乔和牛牛逛超市
数据结构·c++·算法
muyierfly2 小时前
34.贪心算法1
算法·贪心算法
王中阳Go3 小时前
字节跳动的微服务独家面经
微服务·面试·golang
Jiaberrr4 小时前
前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)
前端·javascript·vue.js·微信小程序·uni-app
everyStudy4 小时前
JS中判断字符串中是否包含指定字符
开发语言·前端·javascript
城南云小白4 小时前
web基础+http协议+httpd详细配置
前端·网络协议·http
前端小趴菜、4 小时前
Web Worker 简单使用
前端
luthane4 小时前
python 实现average mean平均数算法
开发语言·python·算法
web_learning_3214 小时前
信息收集常用指令
前端·搜索引擎