也就是优先队列,我们知道STL中提供了一个好用的优先队列priority_queue<T>,C语言中起码有不少库(比如librock)提供了这玩意,所以写这玩意纯属造无意义的轮子。但是我写这玩意主要是因为最近在面试,至少遇到了两次让手写一个堆(不过当时都没写出来,毕竟不会真的有人要手写STL提供的算法和数据结构吧?不会吧?不会吧?),闲着也是闲着,不如锻炼一下,堆还是很好写的。

我写的这个版本用void*模拟泛型,同时能自动扩容,但是缺点也很多,就我自己的感觉是时间复杂度的常数肯定很大,虽然是$O(\log_2 n)$​​​​​,但是有大量的判断,而且插入位置也没有优化,只写了个简单的测试例,总之不推荐在生产环境用(STL不香吗?)。

阅读全文 »

是的,现在api.js成为模块啦!但是我改了下名字,现在他叫restful-proxy,因为我实际上是对RESTful风格的API进行封装,而且用了Proxy,本来是想叫做restful.js的,无奈这个名字已经有人用了(虽然万年没更新,而且也没有我的抽象)。

因为大多数题目的字符串都是小写字母,所以就按照这个设计了,共26个英文字母,每个节点占用26个char。

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
class TrieNode {
public:
array<TrieNode *, 26> node;
TrieNode() : node({nullptr}) {}
void insert(string &s) {
TrieNode *ptr = this;
for (auto c: s) {
c -= 'a';
if (ptr->node[c] == nullptr) {
ptr->node[c] = new TrieNode;
}
ptr = ptr->node[c];
}
}
bool find(string &s) {
TrieNode* ptr = this;
for (auto c: s) {
c -= 'a';
if (ptr->node[c] == nullptr) {
return false;
} else {
ptr = ptr->node[c];
}
}
return true;
}
};

两个小时,三道题,第二题实在是粗心了,正确率应该能提到100%的,忘记对结果进行特判。

结果

A题

第一题可以选择中文或者英文题面,不过题目好像不太一样,我做的中文题。

阅读全文 »

总之是闯了大祸,好在最后数据都没事。主要问题是我对LVM操作不熟练,以及对文件系统和磁盘没有比较清晰的认识,具体来说就是我以为LVM在进行lvresize时会自动处理文件系统,这当然是错误的,文件系统应该使用resize2fs命令来调整,LVM管理的是块设备,不会处理文件系统上的问题。

阅读全文 »

与时髦的应用层码农不同,我们这些嵌入式码农在写单片机程序的时候大多使用上古的Keil,不得不说,Keil确实好用,编译、调试都可以一键完成,但只提供Windows版本,而且界面还停留在上个世纪,也没有自动补全等现代IDE的功能。

自从前段时间换了MacBook Pro之后我就基本上用它来干活了,虚拟机跑Keil实在是得不偿失,更换嵌入式开发环境在所难免。

阅读全文 »

题目

Alice 和 Bob 在做游戏。有一个长度为$n$的正整数序列,Alice 先手,两人轮流操作。Alice 需要删掉一个非空连续子段,子段和为奇数;Bob 需要删掉一个非空连续子段,子段和为偶数。删除子段后左右两段拼接起来形成新的序列。不能操作的人输。如果两个人都足够聪明,那么谁会获胜?

阅读全文 »