 GeeksforGeeks App
Open App Browser
Continue

# Find the missing elements from 1 to M in given N ranges

Given N segments as ranges [L, R] where ranges are non-intersecting and non-overlapping. The task is to find all number between 1 to M that doesn’t belong to any of the given ranges.

Examples:

```Input : N = 2, M = 6
Ranges:
[1, 2]
[4, 5]
Output : 3, 6
Explanation: Only 3 and 6 are missing from
the above ranges.

Input : N = 1, M = 5
Ranges:
[2, 4]
Output : 1, 5```

Approach: Given that we have N ranges, which are non-overlapping and non-intersecting. First of all, sort all segments based on starting value. After sorting, iterate from each segment and find the numbers which are missing.

Algorithm:

Step 1: Start
Step 2: Create a class called Pair and make a constructor which takes two integer values as parameters.
Step 3: Create a static function that takes two parameters as input one in ArrayList of type Pair and the second an integer value.
Step 4: Now sort the given ArrayList using the collections sort method and use a comparator if two values are equal then will sort               on the basis of the ending point.
Step 5: Now create an ArrayList called ans to store our answer
Step 6: Initialize a prev variable’s value to 0, Using a for-loop iterate across each range, saying for each range: first Create start and              end variables from the place where it begins and ends.
, second Using a for-loop to iterate over all integers between prev and start, determine whether any elements are missing,              and add those that are to the ans ArrayList, third Change prev to end.
Step 7: Start a for-loop, and iterate through each number between prev and m to see if there are any missing elements. If there                 are, add each one to the ans ArrayList.
Lastly, output any values that are less than or equal to m after iterating through the ans ArrayList.
Step 8: End

Below is the implementation of the above approach:

## C++

 `// C++ program to find missing elements``// from given Ranges` `#include ``using` `namespace` `std;` `// Function to find missing elements``// from given Ranges``void` `findMissingNumber(vector > ranges, ``int` `m)``{``    ``// First of all sort all the given ranges``    ``sort(ranges.begin(), ranges.end());` `    ``// store ans in a different vector``    ``vector<``int``> ans;` `    ``// prev is use to store end of``    ``// last range``    ``int` `prev = 0;` `    ``// j is used as a counter for ranges``    ``for` `(``int` `j = 0; j < ranges.size(); j++) {``        ``int` `start = ranges[j].first;``        ``int` `end = ranges[j].second;` `        ``for` `(``int` `i = prev + 1; i < start; i++)``            ``ans.push_back(i);` `        ``prev = end;``    ``}` `    ``// for last segment``    ``for` `(``int` `i = prev + 1; i <= m; i++)``        ``ans.push_back(i);` `    ``// finally print all answer``    ``for` `(``int` `i = 0; i < ans.size(); i++) {``        ``if` `(ans[i] <= m)``            ``cout << ans[i] << ``" "``;``    ``}``}` `// Driver code``int` `main()``{``    ``int` `N = 2, M = 6;` `    ``// Store ranges in vector of pair``    ``vector > ranges;``    ``ranges.push_back({ 1, 2 });``    ``ranges.push_back({ 4, 5 });` `    ``findMissingNumber(ranges, M);` `    ``return` `0;``}`

## Java

 `// Java program to find missing elements``// from given Ranges``import` `java.util.ArrayList;``import` `java.util.Collections;``import` `java.util.Comparator;` `class` `GFG{` `static` `class` `Pair``{``    ``int` `first, second;``    ` `    ``public` `Pair(``int` `first, ``int` `second)``    ``{``        ``this``.first = first;``        ``this``.second = second;``    ``}``}` `// Function to find missing elements``// from given Ranges``static` `void` `findMissingNumber(ArrayList ranges,``                              ``int` `m)``{``    ` `    ``// First of all sort all the given ranges``    ``Collections.sort(ranges, ``new` `Comparator()``    ``{``        ``public` `int` `compare(Pair first, Pair second)``        ``{``            ``if` `(first.first == second.first)``            ``{``                ``return` `first.second - second.second;``            ``}``            ``return` `first.first - second.first;``        ``}``    ``});` `    ``// Store ans in a different vector``    ``ArrayList ans = ``new` `ArrayList<>();``    ` `    ``// prev is use to store end of``    ``// last range``    ``int` `prev = ``0``;``    ` `    ``// j is used as a counter for ranges``    ``for``(``int` `j = ``0``; j < ranges.size(); j++)``    ``{``        ``int` `start = ranges.get(j).first;``        ``int` `end = ranges.get(j).second;``        ` `        ``for``(``int` `i = prev + ``1``; i < start; i++)``            ``ans.add(i);``            ` `        ``prev = end;``    ``}``    ` `    ``// For last segment``    ``for``(``int` `i = prev + ``1``; i <= m; i++)``        ``ans.add(i);` `    ``// Finally print all answer``    ``for``(``int` `i = ``0``; i < ans.size(); i++)``    ``{``        ``if` `(ans.get(i) <= m)``            ``System.out.print(ans.get(i) + ``" "``);``    ``}``}` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``int` `N = ``2``, M = ``6``;``    ` `    ``// Store ranges in vector of pair``    ``ArrayList ranges = ``new` `ArrayList<>();``    ``ranges.add(``new` `Pair(``1``, ``2``));``    ``ranges.add(``new` `Pair(``4``, ``5``));` `    ``findMissingNumber(ranges, M);``}``}` `// This code is contributed by sanjeev2552`

## Python3

 `# Python3 program to find missing``# elements from given Ranges` `# Function to find missing elements``# from given Ranges``def` `findMissingNumber(ranges, m):` `    ``# First of all sort all the``    ``# given ranges``    ``ranges.sort()` `    ``# store ans in a different vector``    ``ans ``=` `[]` `    ``# prev is use to store end``    ``# of last range``    ``prev ``=` `0` `    ``# j is used as a counter for ranges``    ``for` `j ``in` `range``(``len``(ranges)):``        ``start ``=` `ranges[j][``0``]``        ``end ``=` `ranges[j][``1``]` `        ``for` `i ``in` `range``(prev ``+` `1``, start):``            ``ans.append(i)` `        ``prev ``=` `end` `    ``# for last segment``    ``for` `i ``in` `range``(prev ``+` `1``, m ``+` `1``):``        ``ans.append(i)` `    ``# finally print all answer``    ``for` `i ``in` `range``(``len``(ans)):``        ``if` `ans[i] <``=` `m:``            ``print``(ans[i], end ``=` `" "``)``    ` `# Driver Code``if` `__name__ ``=``=` `"__main__"``:``    ` `    ``N, M ``=` `2``, ``6` `    ``# Store ranges in vector of pair``    ``ranges ``=` `[]``    ``ranges.append([``1``, ``2``])``    ``ranges.append([``4``, ``5``])` `    ``findMissingNumber(ranges, M)` `# This code is contributed``# by Rituraj Jain`

## C#

 `// C# program to find missing elements``// from given Ranges``using` `System;``using` `System.Collections;``using` `System.Collections.Generic;` `class` `GFG{``       ` `class` `sortHelper : IComparer``{``   ``int` `IComparer.Compare(``object` `a, ``object` `b)``   ``{``      ``Pair first = (Pair)a;``      ``Pair second = (Pair)b;``      ``if` `(first.first == second.first)``      ``{``        ``return` `first.second - second.second;``      ``}``        ` `      ``return` `first.first - second.first;``   ``}``}` `public` `class` `Pair``{``    ``public` `int` `first, second;``    ` `    ``public` `Pair(``int` `first, ``int` `second)``    ``{``        ``this``.first = first;``        ``this``.second = second;``    ``}``}` `    ` `// Function to find missing elements``// from given Ranges``static` `void` `findMissingNumber(ArrayList ranges, ``int` `m)``{``    ``IComparer myComparer = ``new` `sortHelper();``    ``ranges.Sort(myComparer);``    ` `    ``// Store ans in a different vector``    ``ArrayList ans = ``new` `ArrayList();``    ` `    ``// prev is use to store end of``    ``// last range``    ``int` `prev = 0;``    ` `    ``// j is used as a counter for ranges``    ``for``(``int` `j = 0; j < ranges.Count; j++)``    ``{``        ``int` `start = ((Pair)ranges[j]).first;``        ``int` `end = ((Pair)ranges[j]).second;``        ` `        ``for``(``int` `i = prev + 1; i < start; i++)``            ``ans.Add(i);``            ` `        ``prev = end;``    ``}``    ` `    ``// For last segment``    ``for``(``int` `i = prev + 1; i <= m; i++)``        ``ans.Add(i);` `    ``// Finally print all answer``    ``for``(``int` `i = 0; i < ans.Count; i++)``    ``{``        ``if` `((``int``)ans[i] <= m)``            ``Console.Write(ans[i] + ``" "``);``    ``}``}` `// Driver code``public` `static` `void` `Main(``string``[] args)``{``    ``int`  `M = 6;``    ` `    ``// Store ranges in vector of pair``    ``ArrayList ranges = ``new` `ArrayList();``    ``ranges.Add(``new` `Pair(1, 2));``    ``ranges.Add(``new` `Pair(4, 5));` `    ``findMissingNumber(ranges, M);``}``}` `// This code is contributed by rutvik_56`

## PHP

 ``

## Javascript

 ``

Time Complexity: O(n * log(n)), where n is the length of the vector

Auxiliary Space: O(n)

My Personal Notes arrow_drop_up