leetcode--1、15、167 2Sum、3sum

L1:

无序数组找出相加为target的两个数

特征:无序、无重复、每个元素只能用一次、有且只有一组答案

Tag:O(n) hashmap

解:

Step1:hashmap中,key存储number,value存储index。

Step2:在hashmap的key中寻找 target-number。只需常数时间。

Step3:一边建表一边比较。如果找到,return;如果没找到,将其编入表中。

坑:

不能先建立hashmap完整hashmap之后再逐一比较。因为不可避免同一个元素找到自己。

例如:[3,4,2], target=6。会返回下标[0,0]。

 

 

L167:

有序数组找出相加为target的两个数。

特征:有序、无重复、每个元素只能用一次、有且只有一组答案

Tag:O(n) Two Pointers

解:

一个指针放head,一个指针放tail,

如果nums[head]+nums[tail]<target,则head++; 否则,则tail--

遍历直到head==tail。

注:

语法。

Vector<int> result {head+1,tail+1}

Return result;

 

L15: 3sum

无序数组找出三个数,这三个数相加为0。

特征:无序、有重复、有多组答案

Tag:O(n^2) Two pointers

解:

此题思路在于固定一个数之后,剩下后面的数组可以参考2sum的方法,target为0-num[i]。

Step0:empty check

Step1:排序

Step2:选定固定的数

Step3:2sum求解

坑:

重复问题。

首先,固定的那个数的重复问题。解决思路为while循环直到下一个不同的数出现,注意要将第一个存入。

Case[0,0,0,0,0]

其次,head和tail的值不能相同。判断重复后,用while一直找到不同的head和tail。

Case[-1,-1,0,0,1,1]

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值