Algorithm
时间区间重叠最大个数
可以引申出需要多少个会议室,多少个电影院等题目
主要是离散化时间值,然后再进行一个累计区间的统计
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
|
// g++ A.cpp -o A.o -g --std=c++11
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
bool cmp1(pair<int, int> a, pair<int, int> b) { return a.first != b.first ? a.first < b.first : a.second < b.second; }
int HowManyMovieStore(vector<pair<int, int> >& movies) {
// 开始结束时间可能模板T
unordered_map<int, int> hash_time_point;
int SZ = movies.size();
vector<int> time_points;
for (int i = 0; i < SZ; i++) {
time_points.emplace_back(movies[i].first);
time_points.emplace_back(movies[i].second);
}
sort(time_points.begin(), time_points.end());
int hash_id = 1;
// 需要去重
for (int i = 0; i < time_points.size(); i++) {
if (hash_time_point[time_points[i]] != 0) {
continue;
}
hash_time_point[time_points[i]] = hash_id++;
}
vector<int> count(hash_id + 1);
// 以下过程中最差O(n^2) , 可以通过前缀和方式优化做到 O(n)
// 还有一种堆排序的作法是O(nlog(n)),比较巧妙,故意出出堆一次保证最终堆中size为需要的数量:https://blog.csdn.net/andyjkt/article/details/107742373
// for (int i = 0; i < SZ; i++) {
// // 这里如果判断条件是小于的话就是左闭右开,小于等于就是结束时间也要占用
// for (int j = hash_time_point[movies[i].first];
// j <= hash_time_point[movies[i].second]; j++) {
// count[j]++;
// }
// }
// 前缀和累加方式
for (int i = 0; i < SZ; i++) {
count[hash_time_point[movies[i].first]] += 1;
count[hash_time_point[movies[i].second]] -= 1;
}
for (int i = 2; i <= hash_id; i++) {
count[i] += count[i - 1];
}
int ans = 0;
for (int i = 1; i <= hash_id; i++) {
ans = max(ans, count[i]);
}
return ans;
}
int main() {
vector<pair<int, int> > movies;
movies.push_back({3, 6});
movies.push_back({1, 2});
movies.push_back({9, 11});
movies.push_back({3, 5});
cout << HowManyMovieStore(movies) << endl;
// 排序测试
sort(movies.begin(), movies.end(), cmp1);
for (int i = 0; i < movies.size(); i++) {
cout << "test: " << movies[i].first << " " << movies[i].second << endl;
}
return 0;
}
|
Review
Ted演讲,人们为什么会对毒品上瘾
早年研究是清水和毒水,孤立的小白鼠会一直喝毒水麻醉(毒品有麻醉作用)自己到死。然后如果把孤立的小白鼠的环境改成小白鼠的天堂,有很多美味的食物,有很多异性可以交配,然后发现基本上小白鼠不会去喝毒水。
所以当前社会对禁毒都是个人层面的让那个人受到惩罚式的戒毒,而不是保障就业,保障所有居民的生活条件的社会性戒毒,所以想要彻底戒毒,需要告诉上瘾的人我们爱他,我们和他同在,这才是真正意义上的戒毒。
引申出目前政策导致大家生活很苦,就业环境极差无比,因此就有很多人出现心理问题,就会导致各种犯罪和动乱…
其次是个人方面就需要及时调整自己,在大环境不好,失业时多社交一些,缓解自己的孤独,然后好好提升自己,让自己尽快找到自己创造价值的事情,从而恢复生机
Tips
mit6.824lab3参考
Share-冥想体验分析分享
今天的冥想虽然又没有专注,又很多很多的杂念,但我突然发现冥想就是专注的模拟,它是让自己的注意力专注在一个自己平时完全不会关注的呼吸上,然后任由杂念侵袭,最后再让杂念飘走,这其实就是最强专注的锻炼,因为这是模拟了我们想要专注于某个事情的时候,其他杂念过来了,然后自己能否让其自然飘走的能力。这个和玩游戏时的高强度刺激带来的多巴胺式的专注完全不一样,那个是人体快乐机制的专注,是无法长久的,会在结束后产生巨大的落差感,而这种冥想的专注实现后可以应用在任何事情上面,所以能让你能够专注于当下而不被杂念过多打扰,从而达成斯多葛主义追求的内心的安宁,太美妙了,以后要每天坚持冥想训练!