小结:n数和的解法

两数和:1. 两数之和 - 力扣(LeetCode)

1)暴力:两层for循环遍历nums,时间 O(n^2),空间O(1)。

2)双指针:先对数组排序nums.sort(),接着用左右指针从两边向中间逼近。时间O(nlogn),空间O(1)。

3)哈希表:对数组遍历一次,用dict保存已访问的元素及其下标,一旦当前数能够与dict中的数构成target,返回结果。

三数和:15. 三数之和 - 力扣(LeetCode)

与两数和类似但需要考虑对结果去重

1)暴力(不考虑去重):三层for循环遍历nums,时间 O(n^3)。

2)双指针:先对数组排序nums.sort(),一层for循环套一层双指针。时间O(n^2)。通过对index的限制对结果去重。

3)哈希表:两层for循环遍历数组获得两数和的字典;一层for循环遍历数组寻找第三个数以构成三元组。对结果排序、转成tuple、放入set中以去重。时间O(n^2)。

四数和(1):18. 四数之和 - 力扣(LeetCode)

 与三数和是一样的:

1)暴力(不考虑去重):四层for循环遍历nums,时间 O(n^4)。

2)双指针:先对数组排序nums.sort(),两层for循环套一层双指针。时间O(n^3)。通过对index的限制对结果去重。

3)哈希表:三层for循环遍历数组获得三数和的字典;一层for循环遍历数组寻找第四个数以构成四元组。对结果排序、转成tuple、放入set中以去重。时间O(n^3)。

四数和(2):454. 四数相加 II - 力扣(LeetCode)

有四个数组,不需要复杂的去重操作。

1)暴力:四层for循环遍历有四元组,时间O(n^4)。

2)哈希表:两层for循环获得两数和的字典。两层for循环寻找后两个数构成四元组。时间O(n^2)。

* 多于一个数组,双指针不好用? 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值