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
};

本文完,感谢阅读。

相关推荐
专注API从业者4 小时前
Python + 淘宝 API 开发:自动化采集商品数据的完整流程
大数据·运维·前端·数据挖掘·自动化
Coovally AI模型快速验证5 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun5 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
烛阴5 小时前
TypeScript高手密技:解密类型断言、非空断言与 `const` 断言
前端·javascript·typescript
RaymondZhao345 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
艾伦~耶格尔6 小时前
【集合框架LinkedList底层添加元素机制】
java·开发语言·学习·面试
zhangfeng11336 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
样子20186 小时前
Uniapp 之renderjs解决swiper+多个video卡顿问题
前端·javascript·css·uni-app·html
Nicholas686 小时前
flutterAppBar之SystemUiOverlayStyle源码解析(一)
前端
一只叫煤球的猫6 小时前
🕰 一个案例带你彻底搞懂延迟双删
java·后端·面试