2-sum问题

来源:互联网 发布:windows10如何下载软件 编辑:程序博客网 时间:2024/05/22 09:17

本总结是是个人为防止遗忘而作,不得转载和商用。

题目

         给定N个不同的数以及某定值sum,找到这N个数中的两个数,使得它们的和为sum。

         如给定数组[0, 3, 7, 9,11,14, 16, 17],sum=20,则返回[3,17],[9,11]。

算法步骤

         1,排序

         2,令i=0,j=n

         3,直到i ≥j为止:

                   如果T[i=0] + T[j=N]= 20:记录解,然后 i++, j--

                   如果T[i=0] +T[j=N] < 20:则 i++

                   如果T[i=0] +T[j=N]> 20:则 j--

 

         如果扩展到3-sum,如:Ti + Tj +Tk = sum

         那就将其改成2-sum,即:Ti + Tj =sum - Tk,于是就是在上面的基础上在遍历边Tk。

Hash解法

         把数组弄到Hash表中:

                   1,申请足够大的空间H,对于某个值X,将其代入函数f(x)中,这个f(x)会返回index,这个index是几就把x放在第几个位置。

                   2,遍历a[i],如果f(Sum -a[i])在Hash表中,那就找到了一个解。


 

0 0