Leetcode 之第一题 two sum

来源:互联网 发布:如何在淘宝推广产品 编辑:程序博客网 时间:2024/06/06 02:26

leetcode 第一题 two sum

这一题的大意是有一组数,给出一个和,然后从这组数找出两个数,它们相加等于和,返回这两个数的下标。

这一题据我所知共有三种解法:

1.就是最简单的双重循环,用和减去外层循环中的数,然后在内层循环中找到差。这样子时间复杂度为O(n2),空间复杂度为O(1)。

2.第二种解法就是把这组数进行快速排序,使得它们从小到大排序。然后两个指针分别从头和尾遍历,如果相加大于和,则将尾指针减一,如果小于和,则将头指针加一。如果等于和,那么就在原来的数组中找到目前数字的下标。这时的时间复杂度为O(log2n)+O(n),因为要保存原来的数字的排序,所以空间复杂度为O(n)。

3.第三种就是哈希了。使用map数据结构。此时又有两种略微不同的解法。

①.因为这组数可能会有相同的数字,所以使用multimap数据结构。第一种是先建立multimap结构,将目前元素的值作为multimap的关键字,元素的下标作为multimap的值。然后遍历multimap,搜索和减去其中一个数的差,返回搜索到的关键字的值。

此时需要遍历两边map,时间复杂度为O(n),空间复杂度为O(n)。

②.第二种是先遍历这组数,然后同时建立map结构,如果差在map中已经存在,则将此时map的值和在原来数组的下标返回。

此时只需遍历一遍map,时间复杂度为O(n),空间复杂度为O(n)。


0 0
原创粉丝点击