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

本文完,感谢阅读。

相关推荐
在未来等你4 小时前
Elasticsearch面试精讲 Day 25:Elasticsearch SQL与数据分析
大数据·分布式·elasticsearch·搜索引擎·面试
夜晚中的人海4 小时前
【C++】滑动窗口算法习题
开发语言·c++·算法
~无忧花开~4 小时前
CSS学习笔记(五):CSS媒体查询入门指南
开发语言·前端·css·学习·媒体
程序猿小D4 小时前
【完整源码+数据集+部署教程】【零售和消费品&存货】价格标签检测系统源码&数据集全套:改进yolo11-RFAConv
前端·yolo·计算机视觉·目标跟踪·数据集·yolo11·价格标签检测系统源码
吴鹰飞侠4 小时前
AJAX的学习
前端·学习·ajax
JNU freshman4 小时前
vue 技巧与易错
前端·javascript·vue.js
落一落,掉一掉4 小时前
第十二周 waf绕过和前端加密绕过
前端
Asort4 小时前
JavaScript设计模式(十六)——迭代器模式:优雅遍历数据的艺术
前端·javascript·设计模式
violet-lz4 小时前
数据结构四大简单排序算法详解:直接插入排序、选择排序、基数排序和冒泡排序
数据结构·算法·排序算法
·白小白5 小时前
力扣(LeetCode) ——118.杨辉三角(C++)
c++·算法·leetcode