So here is the detailed question:
Question (1): Suppose a number is missing in a jumbled sequence of 1 to 100. So, find the missing number. So the series may look like this:
{2,4,1,100,67.....}
Solution: Sum of natural numbers is = n*(n+1)/2. So we will find the sum of the series we have and subtract it from the sum of natural numbers from 1 .. 100 and that's how we got the missing number. To illustrate the logic we will take a list of only 10 numbers.
Now let us make the situation more complicated. Suppose we do not know how many numbers are missing in the series it can be 2, 3, 4 or just any number of digits missing. How to figure out which digits are missing.
Here is the solution, see if you can figure out apart from these:
Solution (1)
Approach:
Code listing:
SO the question in the comments can be solved either by the solution given above or there is one more solution. This solution also has the complexity O(n).
So here is the solution:
Approach:
Related posts on this blog:
Checking if i=4or5or6 without using any logical operator like && or ||
Question (1): Suppose a number is missing in a jumbled sequence of 1 to 100. So, find the missing number. So the series may look like this:
{2,4,1,100,67.....}
Solution: Sum of natural numbers is = n*(n+1)/2. So we will find the sum of the series we have and subtract it from the sum of natural numbers from 1 .. 100 and that's how we got the missing number. To illustrate the logic we will take a list of only 10 numbers.
public class FindOneMissingNumber { public static void main(String[] args) { // in the below jumbles series of 1-10, 7 is missing int [] arr = {9,4,5,1,10,2,6,3,8}; // Sum of numbers till 10 int sumNaturalNumbers = 10 *(10+1)/2; int sumOurSeries=0; for(int i=0;i<arr.length;i++){ sumOurSeries +=arr[i]; } System.out.println("Sum of our series: "+sumOurSeries); System.out.println("missing number= "+(sumNaturalNumbers-sumOurSeries)); } }
Now let us make the situation more complicated. Suppose we do not know how many numbers are missing in the series it can be 2, 3, 4 or just any number of digits missing. How to figure out which digits are missing.
Here is the solution, see if you can figure out apart from these:
Solution (1)
Approach:
- Create a new array b[] of the size of missing numbers array a[] +number of digits missing
- copy the numbers from first array into second array so that b[a[i-1]] = a[i]
- Now search the second array to see which field is contains zero
- Missing fields = array positions having zero + 1
Code listing:
/** * * @author Dharmvir Singh * Solution has the complexity as O(n) */ public class FindOneMissingNum { public static void main(String[] args) { // two numbers are missing: 2, 6, 10 int a [] = {3,5,7,1,4,8,9}; int countOfMissingDigits=3; int b [] = new int [a.length+countOfMissingDigits]; for (int i = 0; i < a.length; i++) { b[(a[i]-1)]=a[i]; } for (int i = 0; i < b.length; i++) { if(b[i]==0){ System.out.println("missing number is"+(i+1)); } } } }
SO the question in the comments can be solved either by the solution given above or there is one more solution. This solution also has the complexity O(n).
So here is the solution:
Approach:
- Suppose series is a[]={4,2,3,1,2}. Suppose positions here are starting from i= o to 4
- Start marking the numbers at positions a[a[i]-1] as negative.
- In above process exclude all the numbers which are already marked negative(-)
- All the positions will have their numbers marked (-) except the positions representing the missing number
public class FindMissingNum { /** * @param args */ public static void main(String[] args) { // two numbers are missing: 2, 6 int a[] = { 3, 5, 1, 7, 1, 3, 4, 8, 7, 9 }; int t1, t; for (int i = 0; i < a.length; i++) { t = a[i]; // if t is already negative then make it positive as // positions cannot be negative if (t < 0) { t1 = -t; if (a[t1 - 1] > 0) a[t1 - 1] = -a[t1 - 1]; } else { if (a[t - 1] > 0) a[t - 1] = -a[t - 1]; } } // Print the missing numbers for (int i = 0; i < a.length; i++) { if (a[i] > 0) { System.out.println("Missing Number:" + (i + 1)); } } } }
Related posts on this blog:
Checking if i=4or5or6 without using any logical operator like && or ||
Hey what about if suppose the array has a number repeated on the position of missing number as shown:
ReplyDelete4,1,2,3,4,5,8,9,10,1
The above series has two numbers missing any other solution apart from the one shown here?
"You can find out the missing number in array by following algorithm:
ReplyDelete/* getMissingNumber takes array and size of array as arguments*/
int getMissingNumber (int arr[], int num)
{
int i;
/* For xor of all the elemets in arary */
int x1 = a[0];
/* For xor of all the elemets from 1 to n+1 */
int x2 = 1;
for (i = 1; i< n; i++)
x1 = x1^a[i];
for ( i = 2; i <= n+1; i++)
x2 = x2^i;
return (x1^x2);
}
I also found some more possible solutions. you can check out below link for more solutions:
Find out missing number in an array in java"
http://newtechnobuzzz.blogspot.in/2014/07/find-out-missing-number-in-array-in-java.html
ReplyDeleteYou can find out the cycle or loop in a single linked list by using two pointer approach.
ReplyDeleteBelow link can be useful to find out the algorithm to find cycle or loop in linked list
Find out loop or cycle in linked list in java
http://newtechnobuzzz.blogspot.in/2014/07/how-to-find-loops-or-cycles-in-linked.html
Your thinking toward the respective issue is awesome also the idea behind the blog is very interesting which would bring a new evolution in respective field. Thanks for sharing.
ReplyDeletehttps://www.traininginannanagar.org/sap-training-course-in-chennai
https://www.traininginannanagar.org/microsoft-azure-training-in-annanagar-chennai
https://www.traininginannanagar.org/cyber-security-training-in-annanagar-chennai
https://www.traininginannanagar.org/ethical-hacking-training-in-annanagar-chennai
You can find out the cycle or loop in a single linked list by using two pointer approach.
ReplyDeleteoracle training in chennai
oracle training in omr
oracle dba training in chennai
oracle dba training in omr
ccna training in chennai
ccna training in omr
seo training in chennai
seo training in omr
Excellent post, From this post i got more detailed information,
ReplyDeleteThanks to share with us,
hardware and networking training in chennai
hardware and networking training in porur
xamarin training in chennai
xamarin training in porur
ios training in chennai
ios training in porur
iot training in chennai
iot training in porur