lc807_保持城市天际线 如何避免被别人的带刺情绪影响?【TED演讲】 Speed Up DB Open 看RocksdbFAQ多思考使用问题
Algorithm
lc807_保持城市天际线
思路:
模拟遍历每一个建筑,从上下左右4个方向看过去的4个最大值里面的最小值就是当前建筑的最高值。
而且可以优化成 x,y 水平和垂直的两个方向最大值里的较小一个。
而且每次变化都是不会影响下次的,所以可以原地更新数组。
但是不用更新数组,因为只需要一个 ans。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
int n = grid.size();
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
// 遍历两个方向的最大值里面的最小值
int tmpi = 0;
int tmpj = 0;
for (int k = 0; k < n; k++) {
tmpj = max(tmpj, grid[i][k]);
}
for (int k = 0; k < n; k++) {
tmpi = max(tmpi, grid[k][j]);
}
ans += min(tmpi, tmpj) - grid[i][j];
}
}
return ans;
}
};
|
题解是先记录的行列里的最大值。然后后面直接使用。
但居然两次 O(n^2) 执行时间竟然比我的 O(n^3) 慢,可能数据测试集问题吧。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
int n = grid.size();
vector<int> rowMax(n);
vector<int> colMax(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
rowMax[i] = max(rowMax[i], grid[i][j]);
colMax[j] = max(colMax[j], grid[i][j]);
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
ans += min(rowMax[i], colMax[j]) - grid[i][j];
}
}
return ans;
}
};
// 链接:https://leetcode.cn/problems/max-increase-to-keep-city-skyline/solutions/1153643/bao-chi-cheng-shi-tian-ji-xian-by-leetco-n2lu/
|
Review
如何避免被别人的带刺情绪影响?【TED演讲】
主要是在他人情绪过来的时候,加入一些自我调节:
- 找到事件中的积极解释,并且降低期望。
- ok; so what; now what. 接受现状, 并且知道这是别人的课题,自己不再需要。
当然其实还是要花掉一些精力,所以有条件还是尽量和高能量的人在一起。
Tips
Speed Up DB Open
Share
看RocksdbFAQ多思考使用问题
发现很多业务集成修改 RocksDB 后产生的问题其实都不是 RocksDB 本身的问题,
而是使用 RocksDB 不够熟悉的问题。
多思考使用问题。
所以强烈建议读一下 RocksDB的faq