(资料图片)

160. 相交链表:

这题虽然是简单题,但让我心力交瘁,暴力解是可以,但总觉得有更好的方法,因此我看了题解。假设a链总长为a,b链总长b,相交链长度c,那么a走到末尾时,换走b,b走完换走a,这样,当ab相遇时,走的路径就是a+(b-c)=b+(a-c),就很奇妙!!!相遇就两种情况,一种是找到了相交的点,一种是到末尾(null)。

142. 环形链表 II:

这题我设置了一个map,存下每次走过的节点的次数,当次数等于2时,则遇到了环。

看了题解,用到了快慢指针。我一开始想到的也是快慢指针,但因为了解不多,不知道该怎么走,就放弃了。

fast每次走两步,slow每次走一步,设a为环前长度,b为环长度,当fast与slow相遇时,f=2s=s+nb,s=nb,那么为了找到环的开始节点,假设从head开始走,需要走a+nb,因此s只要再走a步即可。

242. 有效的字母异位词:

开始了哈希表。这题我用的map。先看两个字符串的长度是否相等,相等再继续。如果相等的话,设两个map<char,int>,分别记录字符串各个字符的数量。再比较两个map存的字符数量是否相等。

1002. 查找共用字符:

沿用上题的思想,设两个map<char,int> m,maps,maps记录最终要输出字符的数量,m记录每个字符串各个字符的数量,maps用第一个字符串初始化。之后每次和下一个字符串的m进行比较,取maps[c]和m[c]的最小值。最后,输出maps即可。

349. 两个数组的交集:

这题和242是类似的。不过我只设置了一个数组v记录下nums1的每个数字的数量,数组下标的含义就是nums1里的数字。之后再循环nums2,如果以nums2的数字为下标的v不为空,则将该数字记录到结果集res中,要记得将以nums2的数字为下标的v清空。

推荐内容