leetcode contest weekly 14

这是Leetcode新年第一次Contest,总体感觉题目难度适中。最后一题还是对较复杂的树结构不太了解。

Number Complement

  1. bit操作,从高到低翻转即可。

Magical String

  1. 这种衍生关系,最具有特点的就是后续的状态是靠着前面的状态来推导的。所以其实模拟一下这种关系就可以。

License Key Formatting

这种也是直接按照规则来模拟就行,两个小trick,一个倒序进行,第二个,添加破折号,是按照如果当前是字母,并且前面已经有4个字母的规则。

Sliding Window Median

首先,最普通的想法,依次取K个元素,然后sort一下,取中间。复杂度O(n^2logn).但是很明显,如果我们能把删除、添加、调整顺序、取中间第K个元素,这四个操作,每个都限制在O(logn)内,那么时间复杂度就降为O(nlogn)。很明显,能实现这种需求的就是树结构。起码binary-search tree就能实现这个复杂度。
然后,使用multiset来进行删除,添加,然后使用advance(itor)来获取中间数。multiset使用binary search tree来维持内部元素的有序性。