Skip to content

Commit

Permalink
0430 submit
Browse files Browse the repository at this point in the history
  • Loading branch information
xtray committed Apr 30, 2022
1 parent 575135b commit 0a38886
Show file tree
Hide file tree
Showing 17 changed files with 188 additions and 47 deletions.
3 changes: 3 additions & 0 deletions zuoAlgorithm/000. 学习大纲/算法学习相关网站.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ https://www.careercup.com/
- 牛客网
https://www.nowcoder.com/

程序员代码面试指南 题目
https://www.nowcoder.com/exam/oj/ta?page=4&tpId=101&type=101

- LeetCode
https://leetcode.com/

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
1. [[线段树实例一]]
1. [[方块掉落之后的最大高度]]
1. [[指定范围上涂色的房子有多少种]]
1. [[最大线段重叠问题-线段树实现|最大线段重合问题]]
1. [[最大线段重合问题-线段树实现|最大线段重合问题]]
1. [[矩形重叠问题]]
1. [[给定一个正整数N,返回至少使用多少袋子装苹果]]
1. [[牛羊吃N份青草谁会赢]]
Expand Down
28 changes: 21 additions & 7 deletions zuoAlgorithm/001. 难点重点照顾/_一句话背诵知识点.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,37 @@
# 一句话背诵知识点

---
满二叉树高度是h, 节点个数是2^h - 1个

N层汉诺塔问题移动的最优步数: 2^N -1 步
满二叉树高度是h, 节点个数是`2^h - 1`

Java List<Integer> remove(3): 删除默认为index删除, 除非指明: Integer.valueOf(3)
N层汉诺塔问题移动的最优步数: `2^N -1`

递归恢复现场: 一个分支走完的时候, 下一个平行支路做决策的时候, 要恢复数据为原来的样子再做决策
`Java List<Integer> remove(3)`: 删除默认为index删除, 除非指明: `Integer.valueOf(3)`

递归恢复现场: 一个分支走完的时候, 下一个平行支路做决策的时候, 要恢复数据为原来的样子再做决策

范围尝试模型特别在乎讨论开头和结尾共同结合的可能性

子串子数组问题往往讨论结尾/开头如何如何
子串子数组问题往往讨论以某个位置结尾/开头如何如何

样本对应模型给特别在乎讨论两个样本的结尾如何如何

-1 >> 1 不是除2, 还是-1, 其他负数可以
一个数右移1位不一定会除2, `-1 >> 1` 还是-1, 但除-1以外其他负数是可以的

double类型数据在循环中跳出循环常用的判断 `while (Math.abs(r - l) > 1e-9) {...}`

二叉树递归套路: 不管遇到什么题都想**以X为头的目标怎么实现**, 列可能性, 手段是可以向左树, 右树要简单信息的情况下, 想整个目标怎么实现


我有了左, 右侧信息,并且我不用调研具体状况, 只用简单加工来的问题,能用[[线段树]], 如果你的问题是没有办法简单信息整合得到,必须调研具体状况的用不了线段树

[[动态开点线段树]]它所有的逻辑内容和普通性的数并没有什么区别。它唯一有区别的就是真的需要开空间,我才去开






double类型数据在循环中跳出循环常用的判断`while (Math.abs(r - l) > 1e-9) {...}`



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

---

支持集合合并和查询的结构
**支持集合合并和查询的结构**


- [[并查集代码]]
Expand Down Expand Up @@ -47,6 +47,10 @@
## 练习题
[[真实的用户数量]]

[[朋友圈]]

[[岛数量系列问题]]

[[打砖块]]


18 changes: 15 additions & 3 deletions zuoAlgorithm/002. 知识点总结/20. 算法知识点/扫描线.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
# 扫描线

---
数飞机举例:

### 扫描线定义:
不需要检测每一时刻, 只需要检测起点或者终点的位置(变化的位置只有起点或者终点)


[[数飞机]]举例:
```
暴力扫描:
遍历每个时刻, 检测每个时刻有多少飞机
扫描线:
不需要检测每一时刻, 只需要检测起点或者终点的位置(交点变化的位置只有起点或者终点)
不需要检测每一个时刻,因为只有当飞机起飞或者降落的时候,它会对这个天上飞机的数量有影响。
我们就只要扫描这些起飞或者降落的时间就可以大幅度降低复杂度
```

### 题目
[[数飞机]]
[[最大线段重合问题]]
[[拼车]]

Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@
得到L..R范围上出现最多的值


- [[线段树代码]]
[[线段树代码]]

- [[线段树实例一]]
- [[方块掉落之后的最大高度]]
[[线段树实例一]]

[[方块掉落之后的最大高度]]

## [[动态开点线段树]]
[[天际线问题]]


### [[动态开点线段树]]
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

- [[指定范围上涂色的房子有多少种]]

- [[最大线段重叠问题-线段树实现|最大线段重合问题]]
- [[最大线段重合问题-线段树实现|最大线段重合问题]]


Tips:
Expand All @@ -36,6 +36,6 @@ Tips:

- [[方块掉落之后的最大高度]]
- [[指定范围上涂色的房子有多少种]]
- [[最大线段重叠问题-线段树实现|最大线段重合问题]]
- [[最大线段重合问题-线段树实现|最大线段重合问题]]
- [[矩形重叠问题]]

Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,34 @@

[M]

#扫描线
#优先队列
#小根堆
#线段树

---
https://leetcodfe-cn.com/problems/meeting-rooms-ii

给你一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 `intervals[i] = [starti, endi]` ,返回 所需会议室的最小数量 。


```
示例 1:
输入:intervals = [[0,30],[5,10],[15,20]]
输出:2
示例 2:
输入:intervals = [[7,10],[2,4]]
输出:1
 
提示:
1 <= intervals.length <= 10^4
0 <= starti < endi <= 10^6
```



ref: [[最大线段重合问题-堆实现]]
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
[H]

#单调栈
#数组压缩
#德高望重的噩梦题


---

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,44 +19,44 @@ https://leetcode-cn.com/problems/number-of-islands-ii/

请仔细阅读下方示例与解析,更加深入了解岛屿的判定。

```
示例:
```text
输入: m = 3, n = 3, positions = [[0,0], [0,1], [1,2], [2,1]]
输出: [1,1,2,3]
```
解析:
起初,二维网格 grid 被全部注入「水」。(0 代表「水」,1 代表「陆地」)
```text
0 0 0
0 0 0
0 0 0
```
操作 \#1:addLand(0, 0) 将 grid[0][0] 的水变为陆地。
```text
操作1:addLand(0, 0) 将 grid[0][0] 的水变为陆地。
1 0 0
0 0 0 Number of islands = 1
0 0 0
```
操作 \#2:addLand(0, 1) 将 grid[0][1] 的水变为陆地。
```text
操作2:addLand(0, 1) 将 grid[0][1] 的水变为陆地。
1 1 0
0 0 0 岛屿的数量为 1
0 0 0
```
操作 \#3:addLand(1, 2) 将 grid[1][2] 的水变为陆地。
```text
操作3:addLand(1, 2) 将 grid[1][2] 的水变为陆地。
1 1 0
0 0 1 岛屿的数量为 2
0 0 0
```
操作 \#4:addLand(2, 1) 将 grid[2][1] 的水变为陆地。
```text
操作4:addLand(2, 1) 将 grid[2][1] 的水变为陆地。
1 1 0
0 0 1 岛屿的数量为 3
0 1 0
```

拓展:

你是否能在 O(k log mn) 的时间复杂度程度内完成每次的计算?(k 表示 positions 的长度)
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@

# 打砖块

[H]
#并查集

803.打砖块

---
https://leetcode-cn.com/problems/bricks-falling-when-hit/



有一个 m x n 的二元网格,其中 1 表示砖块,0 表示空白。砖块 稳定(不会掉落)的前提是:

一块砖直接连接到网格的顶部,或者
至少有一块相邻(4 个方向之一)砖块 稳定 不会掉落时
给你一个数组 hits ,这是需要依次消除砖块的位置。每当消除 hits[i] = (rowi, coli) 位置上的砖块时,对应位置的砖块(若存在)会消失,然后其他的砖块可能因为这一消除操作而掉落。一旦砖块掉落,它会立即从网格中消失(即,它不会落在其他稳定的砖块上)。
给你一个数组 hits ,这是需要依次消除砖块的位置。每当消除 `hits[i] = (rowi, coli)` 位置上的砖块时,对应位置的砖块(若存在)会消失,然后其他的砖块可能因为这一消除操作而掉落。一旦砖块掉落,它会立即从网格中消失(即,它不会落在其他稳定的砖块上)。

返回一个数组 result ,其中 result[i] 表示第 i 次消除操作对应掉落的砖块数目。

Expand Down Expand Up @@ -54,7 +54,7 @@ https://leetcode-cn.com/problems/bricks-falling-when-hit/
[0,0,0,0]]
剩下的砖块仍然是稳定的,所以不会有砖块掉落。
因此,结果为 [0,0] 。
```
提示:
Expand All @@ -67,9 +67,7 @@ hits[i].length == 2
0 <= xi <= m - 1
0 <= yi <= n - 1
所有 (xi, yi) 互不相同



```

ref:
[[粘在天花板上的数字与炸弹]]
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# 拼车

#扫描线

1094.拼车
[M]

---

车上最初有 capacity 个空座位。车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向)

给定整数 capacity 和一个数组 trips ,  `trip[i] = [numPassengersi, fromi, toi]` 表示第 i 次旅行有 numPassengersi 乘客,接他们和放他们的位置分别是 fromi 和 toi 。这些位置是从汽车的初始位置向东的公里数。

当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false。


```
示例 1:
输入:trips = [[2,1,5],[3,3,7]], capacity = 4
输出:false
示例 2:
输入:trips = [[2,1,5],[3,3,7]], capacity = 5
输出:true
 
提示:
1 <= trips.length <= 1000
trips[i].length == 3
1 <= numPassengersi <= 100
0 <= fromi < toi <= 1000
1 <= capacity <= 10^5
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# 数飞机

391.数飞机

[M]

#扫描线

---
https://www.lintcode.com/problem/391/

描述
给出飞机的起飞和降落时间的列表,用序列 interval 表示. 请计算出天上同时最多有多少架飞机?

如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。

```
样例
样例 1:
输入: [(1, 10), (2, 3), (5, 8), (4, 7)]
输出: 3
解释:
第一架飞机在1时刻起飞, 10时刻降落.
第二架飞机在2时刻起飞, 3时刻降落.
第三架飞机在5时刻起飞, 8时刻降落.
第四架飞机在4时刻起飞, 7时刻降落.
在5时刻到6时刻之间, 天空中有三架飞机.
样例 2:
输入: [(1, 2), (2, 3), (3, 4)]
输出: 1
解释: 降落优先于起飞.
```

ref: [[最大线段重合问题]]
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
# 最大线段重合问题-堆实现
# 最大线段重合问题

#堆
#优先队列


---

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# 最大线段重叠问题
# 最大线段重合问题

#线段树
#优先队列

#堆
#扫描线


---
Expand Down
Loading

0 comments on commit 0a38886

Please sign in to comment.