ARST打卡第239周[239/521]

Algorithm

lc1094_拼车

思路:
暴力方法就是遍历这最多1000个站点,每次把站点上的左右区间最大1000都相加乘客数,时间复杂度是 O(n^2) 是 1e6 .

感觉好一点的优化方案是使用线段树来进行一个操作。

先迅速写完暴力法吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
vector<int> nums(1010, 0);
for (auto& trip : trips) {
int numP = trip[0];
int from = trip[1];
int to = trip[2];
// 这里 to 已经下车,wa了一发
for (int i = from; i < to; i++) {
nums[i] += numP;
if (nums[i] > capacity) {
return false;
}
}
}
return true;
}
};

暴力AC了,学习一下 题解

一开始一直想的前缀和好像不行,看题解发现果然不行,题解用的差分数组,差分数组是前缀和的逆运算。

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
class Solution {
public:
bool carPooling(vector<vector<int>>& trips, int capacity) {
int to_max = 0;
for (const auto& trip: trips) {
to_max = max(to_max, trip[2]);
}

vector<int> diff(to_max + 1);
for (const auto& trip: trips) {
diff[trip[1]] += trip[0];
diff[trip[2]] -= trip[0];
}

int count = 0;
for (int i = 0; i <= to_max; ++i) {
count += diff[i];
if (count > capacity) {
return false;
}
}
return true;
}
};

// 链接:https://leetcode.cn/problems/car-pooling/description/

Review

TED_传递快乐,传递帮助

教育就是一切,用作品用自己的影响力,去让世界变得更好,让世界减少不自由。

Tips-TrivialMove让大文件出现在高层

Compaction Trivial Move

开发 RocksDB 的时候发现一个奇怪的现象,就是 target_file_size_base 明明限制了 l1 文件生成大小,但是居然还有大于此大小的文件在 l1 层。

看 LOG 日志发现是 Trivial Move 操作。(因为我插入的数据没有重叠,于是rocksdb用的 Compaction Trivial Move )
因此知道 rocksdb 的 target_file_size_base 只限制 compaction 生成的文件的大小,并不限制其他方式到达层级的大小。

Share-hexo文件头转hugo文件头

在 hexo 博客中有很多文件的时候,一一去改文件头变成了一件很奢侈的事情,于是就有了自动化脚本修改的念头。

在前人的肩膀上继续 PR 修改,于是有了这个项目的 PR 更新:
hexo2hugo

可以支持 hexo 文件头转 hugo 文件头的如下内容项:

  • date 更新为 UTC+8
  • updated 更新为 lastmod 的 UTC+8
  • tags, categories 支持单行也支持多行格式转数组括号格式