## Amazon Interview Question for Software Engineer / Developers

Comment hidden because of low score. Click to expand.
2
of 2 vote

The easiest solution would be to go exhaustively through the array by doing a double loop:

/*pseudocode*/

int digits[] = {1,2,3,...n}; /*n can be whatever*/
int k = m; /*m can be whatever*/

for (int firstNumberIndex=0; firstNumberIndex < digits.length; firstNumberIndex++)
{
int tempResult = 0;

for(int secondNumberIndex=0; secondNumberIndex < digits.length; secondNumberIndex++)
{

/*My assumption is adding a digit located at an array position to itself
does not count*/
if(!firstNumberIndex == secondNumberIndex)
{
tempResult = digits[firstNumberIndex] + digits[secondNumberIndex];

if(tempResult == k)
{
//print first and second digit
System.out.println(digits[firstNumberIndex] + " plus " + digits[secondNumberIndex] + " equals " + k)
}

tempResult = 0; //resetting to zero out of paranoia. :)

}
}//Close inner loop
} //Close outer loop

I think this would do the job, even though it would be slow. It could be sped up a bit if we have more information such as if negative numbers are allowed, if zeroes are allowed, etc. Then you could have logic to exclude those right off the bat by sorting the array first, getting rid of negatives, zeroes, and any numbers where n >= k depending on what conditions are true.

It could also be sped up if you know whether you need to print out every instance of a pair n+ m or whether it would be sufficient to print it out once and ignore it when you find it again (say you find 1 + 3 equals 4, do you need to print it out every time you find a new 3 in the array?)

If anyone finds a mistake in my pseudo-code, I'd appreciate input if you're reading. :)

Comment hidden because of low score. Click to expand.
0

Actually, this was a very naive solution after I thought about it some more. The solution seems now so deceptively obvious and simple that it's actually hard to find because one's tendency is to look for something complex:

for each number x in the array
y = k-x;
if y is in the array, print out x + y = k
if y is not in the array, then it cannot be part of a pair, period.

Since it's only a pair of numbers, you can only have one solution. For example if k = 57, and y = 33, your combination is always going to be 57 - 33 = 24. The pair will always be 24 + 33, and no other way about it.

Now if instead of a pair, it was three numbers, then things get more complicated, but I think the solution would be along similar lines (probably recursive).

Comment hidden because of low score. Click to expand.
0
of 0 vote

Amazon doesn't normally ask more than 2 questions on telephone. Usually one coding and one design. I find it strange they asked you all that.
1 and 2 you may google to find the detail
3) The question is not clear, two or more students may end up having same marks therefore they must be on same rank[this is the assumption i'm going by].
Sol'n a) sort the input and increase the rank as input value increase. Time O(nlogn), space O(1)
Sol'n b) Hash <mark, numStudents> then run a loop from 0 to 100 and hash lookup and assign rank. Time O(n), space O(n)
4) Discussed many times sort then have two index pointing to 0, and n-1, increase/decrease accordingly

Comment hidden because of low score. Click to expand.
0
of 0 vote

<pre lang="" line="1" title="CodeMonkey46984" class="run-this">/* The class name doesn't have to be Main, as long as the class is not public. */
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
String s;
}
}

</pre><pre title="CodeMonkey46984" input="yes">
1</pre>

Comment hidden because of low score. Click to expand.
0
of 0 vote

did u clear the interview?? i got nervous and dint do well to.. :( so just wanted to know!!

Comment hidden because of low score. Click to expand.
0
of 0 vote

4)#include<stdio.h>
main()
{
int x=1,a[20]={7,7,7,1,1,1,2,2,2,3,3,4,4,4,4},i,j,k=8;
for(i=0;i<20;i++)
{
for(j=0;j<20;j++)
{
if((a[i]+a[j])==k)
{
if(i==j) printf("%d\n",i);
else printf("%d %d\n",i,j);

}
}
}
Could somebody helpme out dis please , i wrote dis code tell me whether it is correct one or not?

Comment hidden because of low score. Click to expand.
0

The solution is simple and correct. It is exhaustive by nature. you could also simplify this, by integrating the solution that was previously posted:

``````main()
{
int x=1,a[20]={7,7,7,1,1,1,2,2,2,3,3,4,4,4,4},i,j,k=8;
for(i=0;i<20;i++)
{
possiblePair = k - a[i];
for(j=0;j<20;j++)
{
if(a[j] == possiblePair)
{
printf("%d %d\n",i,j);
break; //if you dont have to find all pairs, just one pair is ok
}
}
}``````

Comment hidden because of low score. Click to expand.
0
of 0 vote

i have interview tomo..can somebody help

Comment hidden because of low score. Click to expand.
0
of 0 vote

``````#include<stdio.h>
#include<conio.h>
void main()
{

int arr[] = {1,7,4,8,2,9,3} , k , n , ctr1 , ctr2 , sum;
n = 7;
k = 10;
clrscr();
printf("the subsets with the sum = k (10)");
for(ctr1 = 0; ctr1<n ; ctr1++)
{
for(ctr2 = ctr1+1 ; ctr2<n ; ctr2++)
{
sum = arr[ctr1]+arr[ctr2];
if(sum==k)
{
printf("arr[%d]+arr[%d] = %d \n", ctr1 , ctr2 , sum );
}
}
}
getch();
}``````

Comment hidden because of low score. Click to expand.
0
of 0 vote

``````public static int largestContinuousSum(int[] A){
int maxSum= A[0];
int sum =0;
for(int i:A){
sum= sum+i;
if(sum>maxSum){
maxSum = sum;
}
}
return maxSum;
}
public static void main(String[] args) {
int[] A = { 1, 2, 5, -8, 11, 12, -16, 6, 7, 1, 11 };
System.out.println(largestContinuousSum(A));
}``````

Comment hidden because of low score. Click to expand.
0
of 0 vote

``````public class PairSum {

public static void pairSum(int[] A, int k) {
Set<Integer> arraySet = new HashSet<>();
for (int i : A) {
}
for (int i : arraySet) {
int diff = k - i;
if (i != diff && arraySet.contains(diff)) {
System.out.println("Pair: " + i + "--" + diff);
}
}
}

public static void main(String[] args) {
int[] A = { 1, 2, 5, 8, 11, 12, 16, 6, 7, 1, 11 };
pairSum(A, 13);

}
}``````

Comment hidden because of low score. Click to expand.
0
of 0 vote

``````public  static void foo(int[] A, int sum) {
HashSet set = new HashSet();
for(int e:A){
if(set.contains(sum-e)){
System.out.println(e +","+(sum-e));
set.remove(sum-e);
}else{
}``````

}

Name:

Writing Code? Surround your code with {{{ and }}} to preserve whitespace.

### Books

is a comprehensive book on getting a job at a top tech company, while focuses on dev interviews and does this for PMs.

### Videos

CareerCup's interview videos give you a real-life look at technical interviews. In these unscripted videos, watch how other candidates handle tough questions and how the interviewer thinks about their performance.