38.md 4.7 KB
Newer Older
W
wizardforcel 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
# 编码面试的间隔备忘单

> 原文:[https://www.techinterviewhandbook.org/algorithms/interval/](https://www.techinterviewhandbook.org/algorithms/interval/)

<header>

## 简介[](#introduction "Direct link to heading")

区间问题是[数组](/algorithms/array/)问题的一个子集,其中给你一个二元数组的数组(一个区间),两个值代表一个开始值和一个结束值。区间问题被认为是数组家族的一部分,但它们涉及一些常见的技术,因此它们被提取到自己的特殊部分。

一个区间数组的例子:`[[1, 2], [4, 7]]`

对于那些以前没有尝试过的人来说,区间问题可能很棘手,因为当它们重叠时,需要考虑的情况非常多。

## 面试时要注意的事情[](#things-to-look-out-for-during-interviews "Direct link to heading")

*   向面试官澄清`[1, 2]``[2, 3]`是否被视为重叠区间,因为这会影响你如何填写你的平等检查。
*   明确`[a, b]`的间隔是否严格遵循`a` < `b` ( `a`小于`b`)

## 拐角情况[](#corner-cases "Direct link to heading")

*   没有间隔
*   单一区间
*   两个间隔
*   非重叠区间
*   在另一个时间间隔内完全消耗的时间间隔
*   重复的间隔(完全相同的开始和结束)
*   恰好在另一个区间结束处开始的区间- `[[1, 2], [2, 3]]`

## 技巧[](#techniques "Direct link to heading")

### 按起点 [](#sort-the-array-of-intervals-by-its-starting-point "Direct link to heading") 对区间数组进行排序

区间问题的一个常见例程是按照每个区间的起始值对区间数组进行排序。这一步对于解决[合并区间](https://leetcode.com/problems/merge-intervals/)问题至关重要。

### 检查两个区间是否重叠[](#checking-if-two-intervals-overlap "Direct link to heading")

熟悉编写代码检查两个区间是否重叠。

```
def  is_overlap(a, b):  return a[0]  < b[1]  and b[0]  < a[1] 
```

### 合并两个区间[](#merging-two-intervals "Direct link to heading")

```
def  merge_overlapping_intervals(a, b):  return  [min(a[0], b[0]),  max(a[1], b[1])] 
```

## 基本问题[](#essential-questions "Direct link to heading")

如果你在学习这个话题,这些是需要练习的基本问题。

*   [合并间隔](https://leetcode.com/problems/merge-intervals/)
*   [插入间隔](https://leetcode.com/problems/insert-interval/)

## 推荐练习题[](#recommended-practice-questions "Direct link to heading")

*这些是在你为题目学习并练习了基本问题后推荐练习的问题。*

*   [非重叠区间](https://leetcode.com/problems/non-overlapping-intervals/)
*   [会议室(LeetCode Premium)](https://leetcode.com/problems/meeting-rooms/)
*   [第二会议室(LeetCode Premium)](https://leetcode.com/problems/meeting-rooms-ii/)

## 推荐课程[](#recommended-courses "Direct link to heading")

### [AlgoMonster](https://shareasale.com/r.cfm?b=1873647&u=3114753&m=114505&urllink=&afftrack=)[T3】](#algomonster "Direct link to heading")

AlgoMonster 旨在帮助你在最短的时间内通过技术面试。由谷歌工程师开发的 AlgoMonster 使用数据驱动的方法来教你最有用的关键问题模式,并有内容帮助你快速修改基本的数据结构和算法。最重要的是,AlgoMonster 不是基于订阅的——支付一次性费用,就可以获得**终身访问**[**今天加入七折优惠→**](https://shareasale.com/r.cfm?b=1873647&u=3114753&m=114505&urllink=&afftrack=)

### [寻找编码面试:编码问题的模式](https://designgurus.org/link/kJSIoU?url=https%3A%2F%2Fdesigngurus.org%2Fcourse%3Fcourseid%3Dgrokking-the-coding-interview)[](#grokking-the-coding-interview-patterns-for-coding-questions "Direct link to heading")

设计大师的这门课程扩展了推荐练习题中的问题,但从问题模式的角度来进行练习,这是一种我也同意的学习方法,我个人也使用这种方法来更好地编写面试代码。本课程允许你用 Java、Python、C++、JavaScript 来练习选定的问题,并提供这些语言的示例解决方案以及一步一步的可视化。**学习和理解模式,而不是背答案!** [**现在获得终身使用权→**](https://designgurus.org/link/kJSIoU?url=https%3A%2F%2Fdesigngurus.org%2Fcourse%3Fcourseid%3Dgrokking-the-coding-interview)

### [掌握编码面试:数据结构+算法](https://fxo.co/DQpY)[](#master-the-coding-interview-data-structures--algorithms "Direct link to heading")

这本 Udemy 畅销书是评分最高的面试准备课程之一(4.6 星,21.5k 评分,135k 学生),包含了价值 **19 个小时**的内容。像技术面试手册一样,它超越了编码面试,涵盖了简历,非技术面试,谈判。是一个全包!请注意,JavaScript 用于编码演示。 [**结账→**](https://fxo.co/DQpY)

</header>