week21

201 - 数字范围按位与

avatar

代码就是找到那个分界线 把后面的都置0 即可(先左移再右移)

202 - 快乐数

感觉是简单模拟.jpg

其实也是链表判断有无环的问题,但本题最后结果为1 仅有1自环的可能,如果遇到重复元素且不是1的话 一定是无限循环的;

  1. 哈希版

  1. 快慢指针版

203 - 移除链表元素

注意的点就在 会有连续删除的情况 所以删完一个元素不能直接指next

204 - 计数质数

线性筛马上拿出来背一遍, 数论确实很难见到 原谅自己忘了hh

质数定理: 在x -> +inf 时候, 0 ~ x 质数的个数 ~ x/ln(x)

提到算质数肯定就是线性筛了,线性筛保证每个数字只会被筛一次 所以时间复杂度是o(n)的;

线性筛保证每个合数都只被他的最小质因子筛掉一次 -> 是往后筛

(这里是包括n的)

所以 在i % primes[j] != 0 的情况下 primes[j] 一定是最小质因子; 跳出条件就是i % primes[j] == 0;

记住就好了;

205 - 同构字符串

模拟题:

有这两个条件:

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。 不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

第一个条件用一个哈希表来存储s->t映射关系,第二个条件用一个set来存是否t的字符是否有被映射过

206 - 反转链表

感觉做过.jpg

avatar
  1. 迭代

  1. 递归

207 - 课程表

Leetcode的图论题真的很少.. 看到了图论题就来复习一下8

图论复习

回过来,这里显然就是拓扑排序了

208 - 实现Trie(前缀树)

Trie树 这个数据结构也比较简单 就是按照单词的顺序把每个字母建一条边; 常用于存储大量单词这样的情况; 如果前缀相同则共享边, 以此节省存储空间

树的每个节点属性: 26个儿子 + 是否为单词结尾的bool标记

searchstartWith 的区别就在于最后是否要判断单次结尾标记

209 - 长度最小的子数组

提到滑动窗口 很快啊 我就把这个题翻出来看一遍, 滑动窗口分两种固定窗口大小的和不固定的 不固定的就不太好写看看这个复习一下

Leetcode 76. 最小覆盖子串

所以这题的整体逻辑是一样的, 由于列表只会遍历一次所以是o(n)的;

210 - 课程表II

拓扑排序的出栈顺序就是拓扑排序的结果,保存出栈顺序当然是数组模拟链表啦hh;

Last updated