I got below question in one of my company entrance exam. All testcases were passing except 4 testcase. Can someone try to lookout what can be the possible scenario, which might be failing. Question and solutions are given below:
Mean, Median and Mode
Given 'n' integers find their mean median and mode. You are requested to fill in a function that takes an input integer 'input1' (1<=input1<=1000) and an integer array input2[] containing 'input1' integers and returns output1 as the mean output2 as the median and output3 as the mode.
The mean and median must be correct to six decimal places.
Mean: Defined as the avearge of all numbers in array.
Median : Define as the middle element of array.
If n is even the median is the average of the two middle elements If n is odd, the median is the middle element of array.
Note : For finding the median,elements in the array have to be listed in numerical order from smallest to largest.
Mode: Defined as the number in the array with highest frequency. If many numbers have the same highest frequency then the mode is calculated by breaking the ties in favour of the smallest of the numbers.
Input specifications :
Input1 : Integer in the range of 1<=input1<=1000 denoting length of input array.
Input2 : Integer input array.
Output specifications :
Return output1(double) variable as the mean.
Return output2(double) variable as the median.
Return output3(int) variable as the mode.
Sample Test Case 1:
input1: 3
input2: {1,2,3}
Output : 2.000000,2.000000,1
Sample Test Case 2:
input1: 5
input2: {41, 18467, 6334, 26500, 19169 }
Output : 14102.200000,18467.000000,41
package algo;
import java.util.*;
public class MeanMedianMode
{
// Function for calculating mean
public static double findMean(int n , int a[])
{
int sum = 0;
for (int i = 0; i < n; i++)
sum += a[i];
return (double)sum / (double)n;
}
public static double findMedian(int n, int a[])
{
// First we sort the array
Arrays.sort(a);
// check for even case
if (n % 2 != 0)
return (double)a[n / 2];
return (double)(a[(n - 1) / 2] + a[n / 2]) / 2.0;
}
public static int findMode(int n, int a[] ) {
int maxValue=0, maxCount=0;
for (int i = 0; i < a.length; ++i) {
int count = 0;
for (int j = 0; j < a.length; ++j) {
if (a[j] == a[i]) ++count;
}
if (count > maxCount) {
maxCount = count;
maxValue = a[i];
}
}
return maxValue;
}
// Driver code
public static void main(String args[])
{
int a[] = { 41, 18467, 6334, 26500, 19169 };
int n = a.length;
System.out.println("Mean = " + String.format("%.6f", findMean(n, a)));
System.out.println("Median = " + String.format("%.6f", findMedian(n, a)) );
System.out.println("Mode = " + findMode(n, a));
}
}
Edit: Can there be any scenario of bimodal, trimodal array like {1,1,2,2} and {1,1,2,2,3,3} where mode can be {1,2} or {1,2,3} . I am asking this since return type will be int[] in this case, but in question it was specifically mentioned that return type must be int.