您的位置:首页 > 其它

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

2017-09-23 16:52 253 查看
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]

 

 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: