【LeetCode刷题】哈希表

三数之和

核心思路:双指针

时间复杂度: O ( n 2 ) O(n^2) O(n2)

  • 对数列进行从小到大的排序,从而对求和的范围有预期(例如当前的值为正,则之后之和必然为正)
  • 主指针:沿着从小到大的顺序遍历数列【遍历】
  • 头尾移动指针:在主指针之后的范围内遍历至相遇,通过和与0的大小关系,移动两个指针的位置

四数之和

时间复杂度: O ( n 3 ) O(n^3) O(n3)

vs. 三数之和

  • 在三数之和的基础上,再加一层for循环
  • 求和的target未必为0,因此要慎重进行剪枝(例如:和target的大于关系会受到负数的影响)

细节 - 去重

  • 对于两个for主循环,都要去重,但要确保第一个unique的元素必须要被计算到(所以跟i-1,即前一位相比)
    • 因为第一个重复元素所对应的双指针集合包含了之后重复元素对应的双指针集合
  • 双指针中去重,已经使用过的指针不必再使用,对于调整sum_(循环内临时sum值)没有作用,因此和下一位相比
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值