Contents

ARST打卡第271周

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演讲】

主要是在他人情绪过来的时候,加入一些自我调节:

  1. 找到事件中的积极解释,并且降低期望。
  2. ok; so what; now what. 接受现状, 并且知道这是别人的课题,自己不再需要。

当然其实还是要花掉一些精力,所以有条件还是尽量和高能量的人在一起。

Tips

Speed Up DB Open

Share

看RocksdbFAQ多思考使用问题

发现很多业务集成修改 RocksDB 后产生的问题其实都不是 RocksDB 本身的问题, 而是使用 RocksDB 不够熟悉的问题。

多思考使用问题。

所以强烈建议读一下 RocksDB的faq