Press "Enter" to skip to content

Huahua's Tech Road

花花酱 LeetCode 3498 Reverse Degree of a String

送分题,简单仿真即可。

时间复杂度:O(n)
空间复杂度:O(1)

花花酱 LeetCode 2349. Design a Number Container System

两个hashtable,一个是index->number,另外一个是number -> {index},使用treeset,自动排序。

时间复杂度:change O(logn),find O(1)
空间复杂度:O(n)

花花酱 LeetCode 2353. Design a Food Rating System

Hashtable + TreeSet / OrderedSet

用了三个Hashtable…

  1. 菜名 -> 菜系
  2. 菜系 -> Treemap
  3. 菜名 -> 所在Treemap中的迭代器

每个菜系用一个TreeSet来保存从高到低的菜色排名,查询的时候只要拿出第一个就好了。

修改的时候,拿出迭代器,删除原来的评分,再把新的评分加入(别忘了更新迭代器)

时间复杂度:构造O(nlogn),修改O(logn),查询O(1)

空间复杂度:O(n)

花花酱 LeetCode 3242. Design Neighbor Sum Service

青铜 Brute Force:每次需要花费O(n*n)的时间去查找query所在的格子,求和是O(1)。总的时间复杂度达到O(n^4),肯定会超时。

白银 Hashtable:由于所有元素的值的唯一的,我们可以使用hashtable(或者数组)来记录value所在的格子坐标,这样每次Query都是O(1)时间。
时间复杂度:初始化O(n^2),query O(1)。
空间复杂度:O(n^2)

黄金 Precompute:在初始化的时候顺便求合,开两个数组一个存上下左右的,一个存对角线的。query的时候直接返回答案就可以了。
时间复杂度和白银是一样的,但会快一些(省去了求合的过程)。

花花酱 LeetCode 3462. Maximum Sum With at Most K Elements

本题使用了两次 partial sorting / std::nth_element 来进行部分排序,可以作为经典教程了。

速度比全排序或者heap/pq快到不知道哪里去了~

Time complexity: O(m*n)
Space complexity: O(m*n)

不用黑科技就达到99.77%