RTTO WEEK1

WEEK 1

209.长度最小的子数组(m)

用滑动窗口,动态调整窗口的起始位置,不断比较子序列是否符合条件(sum>=s),取当前子序列的长度,取相对较小的。

904.水果成篮(m)

本题的目标是:得到一个最大子串,其中最多含有两种元素;

用一个hashmap表示fruits[i]类型的水果对应摘了几个;

用滑动窗口先遍历右边界,记录更新过程中的type值的变化;

当hashmap中相应类型水果数量为0时,则type++;

若type>2,则更新左边界,把hashmap中fruits[left]水果的数量–,若该水果在hashmap中的数量为0,则type–;

判断每次窗口的长度取历次满足条件的窗口的最大值,即为最终结果;

76.最小覆盖子串(h)

用滑动窗口,两个hashmap比较各类字符串出现的频率?不会做

59.螺旋矩阵(m)

先确定遍历的圈数——n/2;

上右下左分别进行左闭右开的遍历,进行四个for循环,改变i和j;

如果n是奇数最里面是一个数而不是一个圈,需要单独赋值count;

203.移除链表元素(e)

简单链表数据结构;

头节点被删除的情况:直接tmp保存原head,head = head -> next,然后删除tmp;

子节点被删除的情况:开辟一个cur节点,遍历链表元素,若cur ->next 为空则停止遍历(尾节点),删除操作同上;

707.设计链表(m)

简单链表数据结构;

需要注意的点是选择index位置的元素的while终止条件;

判断_size异常输入的条件;

206.反转链表(e)

快慢指针;

一个在前一个在后,使用一个tmp来记录cur节点的后一个节点,以便循环推进,每次使得快指针指向的节点重新指向慢指针指向的节点;

24.两两交换链表中的节点(m)

画图!

三个步骤,要注意先暂存两个值,以及每一步骤都会改变当前链表结构,需要画图一步步看当前链表状态;

19.删除链表的倒数第N各结点(m)

双指针;

让fast移动n步;

然后让fast和slow同时移动,直到fast指向链表末尾;

删掉slow所指向的节点;

面试题 02.07. 链表相交(e)

分别求两链表的长度,计算长度差,先把长链表遍历一段长度差,控制两个链表一样长,然后同时开始遍历两个链表,若遍历到了相同节点则找到了交点。

142.环形链表Ⅱ(m)

分两步:判断是否有环;若有环判断环的出口;

是否有环:快慢指针,快指针一次移动两个,慢指针一次移动一个,若有环快慢指针会在不空的节点上相遇;

环的出口:从头结点出发一个指针,从相遇节点也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是环形入口的节点(这步有点绕)