Java Puzzle – Find Missing Number In An Array


Java Puzzle :

If ‘n’ is the positive number and ‘a’ is an array of integers of length n-1 containing elements from 1 to n. Then find the missing number in ‘a’ in the range from 1 to n. Occurrence of each element is only once. i.e ‘a’ does not contain duplicates.

Example :

If n = 8, then array ‘a’ will have 7 elements in the range from 1 to 8. For example {1, 4, 5, 3, 7, 8, 6}. One number will be missing in ‘a’ (2 in this case). You have to find out that missing number.

Solution :

Step 1 : First we find out sum of ‘n’ numbers by using formula n*(n+1)/2.

Step 2 : Then we will find sum of all elements of array ‘a’.

Step 3 : Missing_Number = (Sum of 1 to ‘n’ numbers) – (Sum of elements of array ‘a’)

Java Program To Find Missing Number In An Array :

public class MissingNumberInArray
{
	//Method to calculate sum of 'n' numbers

	static int sumOfNnumbers(int n)
	{
		int sum = (n * (n+1))/ 2;

		return sum;
	}

	//Method to calculate sum of all elements of array

	static int sumOfElements(int[] array)
	{
		int sum = 0;

		for (int i = 0; i < array.length; i++)
		{
			sum = sum + array[i];
		}

		return sum;
	}

	public static void main(String[] args)
	{
		int n = 8;

		int[] a = {1, 4, 5, 3, 7, 8, 6};

		//Step 1

		int sumOfNnumbers = sumOfNnumbers(n);

		//Step 2

		int sumOfElements = sumOfElements(a);

		//Step 3

		int missingNumber = sumOfNnumbers - sumOfElements;

		System.out.println("Missing Number is = "+missingNumber);
	}
}

19 Comments

  1. private static void findMissingNumbers() {

    int[] inputArray = {1,4,0,3,2, 7, 8, 6};
    Arrays.sort(inputArray);
    int min = inputArray[0];
    System.out.println(“min is “+min);
    int max = inputArray[inputArray.length-1];
    System.out.println(“Max is :”+max);
    int initialValue = min;
    System.out.println(“The Missing number is :”);
    for(int i=initialValue;initialValue<max;){
    i++;
    boolean isAval = false;
    for(int j=0;j<inputArray.length;j++){
    if(inputArray[j]==i){
    isAval = true;
    }
    }
    if(!isAval){
    System.out.println(i);
    }
    initialValue++;
    }

    }

      • package Sampleprograms;

        import java.util.Arrays;
        import java.util.HashSet;
        import java.util.Scanner;

        public class MissingarrayRandomElements
        {
        public static void main(String[] args)
        {
        int[] a1=new int[5];int j=0;
        Scanner sc=new Scanner(System.in);
        System.out.println(“Enter array elements”);
        for(int i=0;i<a1.length;i++)
        {
        a1[i]=sc.nextInt();
        }
        Arrays.sort(a1);
        HashSet hs=new HashSet();
        System.out.println("min value");
        int min=sc.nextInt();
        System.out.println("max value");
        int max=sc.nextInt();
        for(int i=min; i<max; i++)
        {
        if (j<a1.length && i==a1[j])
        {
        j++;
        }
        else
        {
        hs.add(i);
        }
        }
        System.out.println(hs);
        }
        }

  2. For more than one missing number

    import java.util.Arrays;
    import java.util.HashSet;

    public class Demo
    {
    public static void main(String[] args)
    {
    int [] a1={1,2,5,7,6};
    Arrays.sort(a1);
    HashSet hs=new HashSet();
    int j=0;
    for(int i=1; i<10; i++)
    {
    if (j<a1.length && i==a1[j])
    {
    j++;
    }
    else
    {
    hs.add(i);
    }
    }
    System.out.println(hs);
    }
    }

  3. Hey ,
    you are calculating sum with mathematical formula . that is wrong. if you provide this formula then it will give you right ans.

    int n = numbers.length;
    int sumOfNnumbers = (n+1)*(n+2)/2;

    then remove

    int missingNumber = sumOfNnumbers – sumOfElements;

    Thanks

  4. Missing number
    public class MessingNumber {

    public static void missingNumberSenumberrch(int[] number, int first, int lnumberst) {

    for (int i = first; i < number[0]; i++) {
    System.out.println(i);
    }
    for (int i = 1; i < number.length; i++) {
    for (int j = 1 + number[i – 1]; j < number[i]; j++) {
    System.out.println(j);
    }
    }
    for (int i = 1 + number[number.length – 1]; i <= lnumberst; i++) {
    System.out.println(i);
    }

    }
    public static void main(String[] args) {

    int number[] = { 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 18, 20};
    missingNumberSenumberrch(number,0,23);

    }

    }

  5. int[] arr={1,2,5,8,6,7,3,9,10};

    int n=arr.length+1;
    int len=arr.length;
    int sum=(n*(n+1))/2;
    System.out.println(sum);
    int sumarr=0;
    for(int i=0;i<len;i++){
    sumarr = sumarr+arr[i];

    }
    System.out.println(sumarr);
    System.out.println("Missing Element in array is :"+(sum-sumarr));

  6. What if I need to print a missing number from an input?
    I have a hard time try to save the input into an array for this to work. Please help?
    This is what I’ve done so far
    public class MissingNumber {

    public int sumOfNumbers;
    public int sumOfElements;

    //Method to calculate sum of ‘n’ numbers
    public static int sumOfNnumbers(int n)
    {
    int sum = (n * (n+1))/ 2;

    return sum;
    }

    //Method to calculate sum of all elements in the user’s input

    /**
    *
    * @param array
    * @return
    */

    public static int sumOfElements(int[] array)
    {
    int sum = 0;

    for (int i = 0; i < array.length; i++)
    {
    sum = sum + array[i];
    }

    return sum;
    }
    }

    Tester class
    import java.util.Scanner;
    public class MissingNumberTester {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    System.out.print("Please enter your list of integer: ");
    int n = in.nextInt();

    int[] array = new int[n];
    for (int i = 0 ; i < array.length; i++ ) {
    array[i] = in.nextInt();
    }
    //Step 1 find sum of
    int sumOfNnumbers = MissingNumber.sumOfNnumbers(n);

    //Step 2

    int sumOfElements = MissingNumber.sumOfElements(array);

    //Step 3

    int missingNumber = sumOfNnumbers – sumOfElements;

    System.out.println("Missing Number is : " +missingNumber);
    }

    }

  7. My missing number program :
    public class FindMissingNumber {
    public static void main(String args[]) {
    int number;

    Scanner scan = new Scanner(System.in);

    System.out.println(“Enter a number: “);
    number = scan.nextInt();

    int [] array = new int [number-1];

    System.out.println(“Enter the numbers in the array : “);
    for(int i = 0; i<number-1; i++) {
    array [i] = scan.nextInt();
    }
    Arrays.sort(array);

    System.out.print("The missing number in the array is : ");
    for(int i = 0; i<number-1; i++) {
    if(i+1!=array[i]) {
    System.out.println(i+1);
    break;
    }
    }
    }
    }

  8. public class MissingNumber
    {
    public static void main(String…arg)
    {
    int a[]={0,1,2,4,5,7,8,9};
    int j=a[0];
    for(int i=0;i<a.length;i++)
    {
    if(j==a[i])
    {
    j++;
    continue;
    }
    else
    {
    System.out.println(j);
    i–;
    j++;
    }
    }
    }
    }

  9. int arr[]=new int[]{1,5,7,8,12,18};
    Arrays.sort(arr);
    for(int i=0;i<arr.length-1;i++){
    int x=arr[i];
    int y=arr[i+1]-arr[i];
    for(int j=1;j<y;j++)
    {
    if(!(arr[i]==arr[i+1])){
    x=x+1;
    System.out.println(x);
    }
    if(arr[i+1]==x)
    {
    break;
    }
    }
    }

  10. this logic works if array starts from 1 . But if array starts from 0 the this logic fails .
    I have different implementation & it works both – array starts from 0 or 1 . I applied quite simple approach :

    static int missing2(int[] array )
    {
    Arrays.sort(array);
    int missing =0 ;
    int n = array.length ;

    if(array[0]==0)
    {
    for(int i=0 ;i<n ;i++)
    {

    if(array[i]!= i)
    {
    missing = i ;
    break ;
    }
    }}
    if(array[0]==1)
    {
    for(int i=0 ;i<n ;i++)
    {
    if(array[i]!= (i+1))
    {
    missing = i+1 ;
    break ;
    }
    }
    }
    return missing ;
    }

  11. public class Demo
    {
    public static void main(String args[])
    {
    int n=8;
    int[] ar = {1, 4, 5, 3, 7, 8, 6};
    int sum1=0,sum2=0;
    for(int i=0;i<ar.length;i++)
    {
    sum1+=ar[i];
    }
    for(int i=1;i<=n;i++)
    {
    sum2+=i;
    }
    System.out.println("the missing no is ="+(sum2-sum1));
    }
    }

  12. package com.sathya.array;

    import java.util.Arrays;
    import java.util.HashSet;
    import java.util.Set;

    public class MissingElementInArray {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    int[] anArray = new int[] {0,3,5,9,12};
    System.out.println( getMissingElements(anArray) );

    }

    public static Set getMissingElements(int[] array)
    {
    int min=0;
    int max=0;
    Set returnSet = new HashSet();
    Arrays.sort(array);
    min = array[0];
    max=array[array.length-1];

    for ( int i=0; i<array.length-1; i++)
    {
    if ( (array[i+1] – array[i] ) ==1)
    {
    continue;
    } else
    {
    int numberOfMissing = array[i+1] – array[i] ;
    for ( int j=1; j<=numberOfMissing-1 ; j++)
    {
    returnSet.add(array[i]+j);
    }
    }
    }

    return returnSet;
    }

    }

  13. import java.lang.reflect.Array;

    public class New_Practice {

    public static void main(String[] args){
    New_Practice np = new New_Practice();
    np.findMissingNumbers(new int[]{1,4,0,3,2,5,6,8});
    }
    public void findMissingNumbers(int [] inputArray) {
    Arrays.sort(inputArray);
    int min = inputArray[0];
    System.out.println(“min is “+min);
    int max = inputArray[inputArray.length-1];
    System.out.println(“Max is :”+max);
    System.out.println(“The Missing number is :”);
    for(int i=0;i<max;i++){
    boolean isAval = false;
    for(int j=0;j<=inputArray.length-1;j++){
    if(inputArray[j]==i){
    isAval = true;
    }
    }
    if(isAval==false){
    System.out.println(i);
    }
    }

    }

    }

Leave a Reply