Amazon Interview Question
Software Engineer in Testsstruct Element
{
int value;
int pos;
};
void Helper(Element* elements, int val, int position)
{
int pos=0;
for(int i=1;i<3;i++)
{
if(elements[i].value<elements[pos].value)
pos=i;
}
if(val>elements[pos].value)
{
elements[pos].value=val;
elements[pos].pos=position;
}
}
int FindThirdLargest(int* arr, int len)
{
Element elements[3];
int pos=0;
if(arr==NULL||len<3)
return -1;
for(int i=0;i<3;i++)
{
elements[i].value=arr[i];
elements[i].pos=i;
}
for(int i=3;i<len;i++)
{
Helper(elements, arr[i], i);
}
for(int i=1;i<3;i++)
{
if(elements[i].value<elements[pos].value)
pos=i;
}
return elements[pos].pos;
}
void main()
{
int arr[7]={102, -5, 238, 999, 781, 6, 7};
int pos=FindThirdLargest(arr,7);
printf("pos %d:value %d",pos,arr[pos]);
getchar();
}
private static int FindThirdLargest(int[] arr)
{
if (arr.Length < 3)
throw new ArgumentException("Array size less than 3");
int max1 = arr[0];
int max2;
int max3;
if(arr[1] > arr[0])
{
max2 = max1;
max1 = arr[1];
}
else
{
max2 = arr[1];
}
if(arr[2] <= max2)
{
max3 = arr[2];
}
else if (arr[2] > max1)
{
max3 = max2;
max2 = max1;
max1 = arr[2];
}
else
{
max3 = max2;
max2 = arr[2];
}
for (int i = 3; i < arr.Length; i++)
{
int val = arr[i];
if (val > max1)
{
max3 = max2;
max2 = max1;
max1 = val;
}
else if (val > max2)
{
max3 = max2;
max2 = val;
}
else if (val > max3 && val < max2)
{
max3 = val;
}
}
return max3;
}
#include <stdio.h>
- Anonymous August 09, 2011int main()
{
int n,f_l,s_l,t_l,i;
int a[30];
printf("no of elem in the array \n");
scanf("%d",&n);
printf("enter the array elements\n");
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
f_l = a[0];
s_l = a[0];
t_l = a[0];
for(i=1;i<n;i++)
{
if (f_l < a[i]){
t_l = s_l;
s_l = f_l;
f_l = a[i];
}
else if (s_l < a[i]){
t_l = s_l;
s_l = a[i];
}
else if (t_l < a[i]){
t_l = a[i];
}
}
printf("the third largest is %d",t_l);
return 0;
}