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. :)

- Anonymous November 24, 2011 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

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).

- anonymous again November 24, 2011 | Flag
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

- Mat May 26, 2011 | Flag Reply
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
{
java.io.BufferedReader r = new java.io.BufferedReader (new java.io.InputStreamReader (System.in));
String s;
while (!(s=r.readLine()).startsWith("42")) System.out.println(s);
}
}

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

- Anonymous May 27, 2011 | Flag Reply
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!!

- Anonymous May 30, 2011 | Flag Reply
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?

- pawanjalsa.teja August 16, 2011 | Flag Reply
Comment hidden because of low score. Click to expand.
0
of 0 votes

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
                 }
        } 
}

- Anonymous July 14, 2012 | Flag
Comment hidden because of low score. Click to expand.
0
of 0 vote

i have interview tomo..can somebody help

- priya October 19, 2012 | Flag Reply
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();
}

- FindMind August 10, 2013 | Flag Reply
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));
	}

- Kunal July 28, 2014 | Flag Reply
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) {
			arraySet.add(i);
		}
		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);

	}
}

- kunal July 28, 2014 | Flag Reply
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{
            set.add(e);
        }

}

- Sudheer February 24, 2016 | Flag Reply


Add a Comment
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.

Learn More

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.

Learn More

Resume Review

Most engineers make critical mistakes on their resumes -- we can fix your resume with our custom resume review service. And, we use fellow engineers as our resume reviewers, so you can be sure that we "get" what you're saying.

Learn More

Mock Interviews

Our Mock Interviews will be conducted "in character" just like a real interview, and can focus on whatever topics you want. All our interviewers have worked for Microsoft, Google or Amazon, you know you'll get a true-to-life experience.

Learn More