+ 1

Checking if any of the 2 numbers adds up to a specific sum?

So I decided at random to write a program that takes an input of several numbers, and checks if any 2 numbers add up to a specific number(This can be anything), and then returns true or false depending on whether or not the program found 2 numbers who's sum is the desired sum. How can I achieve this? Give me some hints. But please, do not give me the answer xD Example: Input: 2, 6, 9, 6 Desired Sum: 12 Output: True //Reason: 6 + 6 = 12 Input: 6, 2, 7, 1 Desired Sum: 4 Output: False I tried explaining as best as I could. Let me know if you don't understand the question.

16th Aug 2018, 7:16 PM
Daniel Cooper
Daniel Cooper - avatar
12 Respostas
+ 5
For each number (n) that is in the array, if you have previously encountered (sum - n), then you have found a pair.
16th Aug 2018, 7:27 PM
Eduardo Petry
Eduardo Petry - avatar
+ 5
VcC That is O(n*log(n)) since you are sorting the list at the beginning.
16th Aug 2018, 9:30 PM
Eduardo Petry
Eduardo Petry - avatar
+ 4
VcC Still O(n*log(n)). Here is my solution that achieves O(n) complexity by using set: https://code.sololearn.com/coBOxLw9Kq88/?ref=app
16th Aug 2018, 10:54 PM
Eduardo Petry
Eduardo Petry - avatar
+ 2
Daniel Cooper try this once : use two for loops... outer one should be on all number in array and inner one should be next number to last number.. if summation is your second input value, you are done...
16th Aug 2018, 7:35 PM
Ketan Lalcheta
Ketan Lalcheta - avatar
+ 1
Daniel Cooper , I think I got your problem statement... first input set will be few numbers and second input will be a number... you want to check whether second input can be achieved by any means of summation from set 1 input numbers.... is this correct?
16th Aug 2018, 7:24 PM
Ketan Lalcheta
Ketan Lalcheta - avatar
+ 1
Here the code from somebody else: Use this prototype in any array numbers to find sum up pair.. Array.prototype.ifSumPair = function(sum) { var len = this.length; for(var i=0;i<len;i++) { for(var j=0;j<len;j++) { if(i===j) continue; if(sum===(this[i]+this[j])) return true; } } return false; } https://code.sololearn.com/Wt12YAFq5uCz/?ref=app
17th Aug 2018, 5:26 AM
Calviղ
Calviղ - avatar
0
Yes. That's exactly correct Ketan Lalcheta
16th Aug 2018, 7:34 PM
Daniel Cooper
Daniel Cooper - avatar
0
Can I have an example Ketan Lalcheta?
16th Aug 2018, 8:09 PM
Daniel Cooper
Daniel Cooper - avatar
0
This can be done with one loop in O(n) time; l=sorted(l) a,b=0,len(l)-1 while (l[a]+l[b]!=target and a<b) if l[a]+l[b]>target: b-=1 else: a+=1 return ((a,b) if a<b else None)
16th Aug 2018, 9:13 PM
VcC
VcC - avatar
0
Can I see this in pure JS? Forgot to mention that I want this in JS xD
17th Aug 2018, 12:22 AM
Daniel Cooper
Daniel Cooper - avatar
0
Calviղ my main man always helping me out lol. Thanks
17th Aug 2018, 5:30 AM
Daniel Cooper
Daniel Cooper - avatar