454.四数相加II
利用哈希表分别存储前两个数组之和,再利用后两个数组之和,看其相反数是否在哈希表中存在,存在则找到目标元组
时间复杂度:O(n²)
383. 赎金信
和 242.有效的字母异位词几乎一模一样,唯一区别就是前者只需满足是后者字符串的一部分即可,比242更简单,同样利用哈希表存储杂志的字母出现次数,需注意的是,使用字母数组比使用字典更加节约时间。
时间复杂度:O(n)
15. 三数之和
此题更适合使用双指针
哈希表的策略:将数组每个数都存入哈希表(注意去重),后再利用两个for循环找到两数,看其相反数是否在哈希表中出现,出现则找到目标元组。
时间复杂度:O(n²)
双指针的策略:先直接将第一个数固定,后两个数的下标分别是第一个数后面开始数第二个以及最后一个,类似于二分的策略,将后两个数的下标指针逐渐向内收缩,找到目标元组。
该方法的优势:剪枝去重更简单,相同时间复杂度下比哈希表更有效率。
时间复杂度:O(n²)
18. 四数之和
虽然与454同叫四数之和,但完全是两道题,此题就是15.三数之和的升级版,方法也是换汤不换药,如果采用哈希表,就在存入哈希表中采用两个for循环(存入的是两数之和);若采用双指针,就从固定一个数变成固定两个数即可。
时间复杂度:O(n**3)
总结:
对于后面两题明显更适合使用双指针,我没有太明白为何要使用哈希表(因为感觉真的太慢了),但掌握哈希表还是十分的重要(空间换时间这个概念总是很实用的)。