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); } }
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++;
}
}
how to find 2 missing number or multiple missing number ?
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);
}
}
#RANJITKUMAR that logic is wrong. what if the min or max value is missing ?
min and max values are taking from inputArray[0] and inputArray[inputArray.length-1]; and they could not be missed.
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);
}
}
can you explain me the code step wise why did we choose
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
So what will b d ans of … The missing letter in an array of 1 to 100 …….? Ans Plz
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);
}
}
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));
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);
}
}
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;
}
}
}
}
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++;
}
}
}
}
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;
}
}
}
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 ;
}
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));
}
}
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;
}
}
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);
}
}
}
}