Related Articles
Search an element in given N ranges
• Difficulty Level : Medium
• Last Updated : 06 Dec, 2019

Given an array of N sorted ranges and a number K. The task is to find the index of the range in which K lies. If K does not lie in any of the given ranges then print -1.
Note: None of the given ranges coincide.

Examples:

Input: arr[] = { { 1, 3 }, { 4, 7 }, { 8, 11 } }, K = 6
Output: 1
6 lies in the range {4, 7} with index = 1

Input: arr[] = { { 1, 3 }, { 4, 7 }, { 9, 11 } }, K = 8
Output: -1

Naive approach: The following steps can be followed to solve the above problem.

• Traverse all the ranges.
• Check if the condition K >= arr[i].first && K <= arr[i].second holds in any of the iterations.
• If the number K does not lie in any of the given range then print -1.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;`` ` `// Function to return the index of the range``// in which K lies and uses linear search``int` `findNumber(pair<``int``, ``int``> a[], ``int` `n, ``int` `K)``{`` ` `    ``// Iterate and find the element``    ``for` `(``int` `i = 0; i < n; i++) {`` ` `        ``// If K lies in the current range``        ``if` `(K >= a[i].first && K <= a[i].second)``            ``return` `i;``    ``}`` ` `    ``// K doesn't lie in any of the given ranges``    ``return` `-1;``}`` ` `// Driver code``int` `main()``{``    ``pair<``int``, ``int``> a[] = { { 1, 3 }, { 4, 7 }, { 8, 11 } };``    ``int` `n = ``sizeof``(a) / ``sizeof``(a);``    ``int` `k = 6;``    ``int` `index = findNumber(a, n, k);``    ``if` `(index != -1)``        ``cout << index;``    ``else``        ``cout << -1;`` ` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``class` `GFG ``{``static` `class` `pair ``{ ``    ``int` `first, second; ``    ``public` `pair(``int` `first, ``int` `second) ``    ``{ ``        ``this``.first = first; ``        ``this``.second = second; ``    ``} ``} `` ` `// Function to return the index ``// of the range in which K lies ``// and uses linear search``static` `int` `findNumber(pair a[], ``                      ``int` `n, ``int` `K)``{`` ` `    ``// Iterate and find the element``    ``for` `(``int` `i = ``0``; i < n; i++)``    ``{`` ` `        ``// If K lies in the current range``        ``if` `(K >= a[i].first && ``            ``K <= a[i].second)``            ``return` `i;``    ``}`` ` `    ``// K doesn't lie in any ``    ``// of the given ranges``    ``return` `-``1``;``}`` ` `// Driver code``public` `static` `void` `main(String[] args)``{``    ``pair a[] = {``new` `pair(``1``, ``3` `), ``                ``new` `pair(``4``, ``7` `),``                ``new` `pair(``8``, ``11` `)};``    ``int` `n = a.length;``    ``int` `k = ``6``;``    ``int` `index = findNumber(a, n, k);``    ``if` `(index != -``1``)``        ``System.out.println(index);``    ``else``        ``System.out.println(-``1``);``}``}`` ` `// This code is contributed by Rajput-Ji`

## Python3

 `# Python 3 implementation of the approach`` ` `# Function to return the index of the range``# in which K lies and uses linear search``def` `findNumber(a, n, K):``     ` `    ``# Iterate and find the element``    ``for` `i ``in` `range``(``0``, n, ``1``):``         ` `        ``# If K lies in the current range``        ``if` `(K >``=` `a[i][``0``] ``and` `K <``=` `a[i][``1``]):``            ``return` `i`` ` `    ``# K doesn't lie in any of the``    ``# given ranges``    ``return` `-``1`` ` `# Driver code``if` `__name__ ``=``=` `'__main__'``:``    ``a ``=` `[[``1``, ``3``], [``4``, ``7``], [``8``, ``11``]]``    ``n ``=` `len``(a)``    ``k ``=` `6``    ``index ``=` `findNumber(a, n, k)``    ``if` `(index !``=` `-``1``):``        ``print``(index, end ``=` `"")``    ``else``:``        ``print``(``-``1``, end ``=` `"")``         ` `# This code is contributed by ``# Surendra_Gangwar`

## C#

 `// C# implementation of the approach``using` `System;`` ` `class` `GFG ``{``     ` `class` `pair ``{ ``    ``public` `int` `first, second; ``    ``public` `pair(``int` `first, ``int` `second) ``    ``{ ``        ``this``.first = first; ``        ``this``.second = second; ``    ``} ``} `` ` `// Function to return the index ``// of the range in which K lies ``// and uses linear search``static` `int` `findNumber(pair []a, ``                    ``int` `n, ``int` `K)``{`` ` `    ``// Iterate and find the element``    ``for` `(``int` `i = 0; i < n; i++)``    ``{`` ` `        ``// If K lies in the current range``        ``if` `(K >= a[i].first && ``            ``K <= a[i].second)``            ``return` `i;``    ``}`` ` `    ``// K doesn't lie in any ``    ``// of the given ranges``    ``return` `-1;``}`` ` `// Driver code``public` `static` `void` `Main(String[] args)``{``    ``pair []a = {``new` `pair(1, 3 ), ``                ``new` `pair(4, 7 ),``                ``new` `pair(8, 11 )};``    ``int` `n = a.Length;``    ``int` `k = 6;``    ``int` `index = findNumber(a, n, k);``    ``if` `(index != -1)``        ``Console.WriteLine(index);``    ``else``        ``Console.WriteLine(-1);``}``}`` ` `// This code is contributed by 29AjayKumar`
Output:
```1
```

Time Complexity: O(N)

Efficient Approach: Binary Search can be used to find the element in O(log N).

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;`` ` `// Function to return the index of the range``// in which K lies and uses binary search``int` `findNumber(pair<``int``, ``int``> a[], ``int` `n, ``int` `K)``{`` ` `    ``int` `low = 0, high = n - 1;`` ` `    ``// Binary search``    ``while` `(low <= high) {`` ` `        ``// Find the mid element``        ``int` `mid = (low + high) >> 1;`` ` `        ``// If element is found``        ``if` `(K >= a[mid].first && K <= a[mid].second)``            ``return` `mid;`` ` `        ``// Check in first half``        ``else` `if` `(K < a[mid].first)``            ``high = mid - 1;`` ` `        ``// Check in second half``        ``else``            ``low = mid + 1;``    ``}`` ` `    ``// Not found``    ``return` `-1;``}`` ` `// Driver code``int` `main()``{``    ``pair<``int``, ``int``> a[] = { { 1, 3 }, { 4, 7 }, { 8, 11 } };``    ``int` `n = ``sizeof``(a) / ``sizeof``(a);``    ``int` `k = 6;``    ``int` `index = findNumber(a, n, k);``    ``if` `(index != -1)``        ``cout << index;``    ``else``        ``cout << -1;`` ` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach ``class` `GFG ``{``static` `class` `pair ``{ ``    ``int` `first, second; ``    ``public` `pair(``int` `first, ``int` `second) ``    ``{ ``        ``this``.first = first; ``        ``this``.second = second; ``    ``} ``} `` ` `// Function to return the index of the range ``// in which K lies and uses binary search ``static` `int` `findNumber(pair a[], ``int` `n, ``int` `K) ``{ ``    ``int` `low = ``0``, high = n - ``1``; `` ` `    ``// Binary search ``    ``while` `(low <= high) ``    ``{ `` ` `        ``// Find the mid element ``        ``int` `mid = (low + high) >> ``1``; `` ` `        ``// If element is found ``        ``if` `(K >= a[mid].first && ``            ``K <= a[mid].second) ``            ``return` `mid; `` ` `        ``// Check in first half ``        ``else` `if` `(K < a[mid].first) ``            ``high = mid - ``1``; `` ` `        ``// Check in second half ``        ``else``            ``low = mid + ``1``; ``    ``} `` ` `    ``// Not found ``    ``return` `-``1``; ``} `` ` `// Driver code ``public` `static` `void` `main(String[] args)``{``    ``pair a[] = { ``new` `pair(``1``, ``3``), ``                 ``new` `pair(``4``, ``7``), ``                 ``new` `pair(``8``, ``11``) }; ``    ``int` `n = a.length; ``    ``int` `k = ``6``; ``    ``int` `index = findNumber(a, n, k); ``    ``if` `(index != -``1``) ``        ``System.out.println(index);``    ``else``        ``System.out.println(-``1``);``    ``}``}`` ` `// This code is contributed by Princi Singh`

## Python3

 `# Python3 implementation of the approach`` ` `# Function to return the index of the range``# in which K lies and uses binary search``def` `findNumber(a, n, K):`` ` `    ``low ``=` `0``    ``high ``=` `n ``-` `1`` ` `    ``# Binary search``    ``while` `(low <``=` `high):`` ` `        ``# Find the mid element``        ``mid ``=` `(low ``+` `high) >> ``1`` ` `        ``# If element is found``        ``if` `(K >``=` `a[mid][``0``] ``and` `K <``=` `a[mid][``1``]):``            ``return` `mid`` ` `        ``# Check in first half``        ``elif` `(K < a[mid][``0``]):``            ``high ``=` `mid ``-` `1`` ` `        ``# Check in second half``        ``else``:``            ``low ``=` `mid ``+` `1`` ` `    ``# Not found``    ``return` `-``1`` ` `# Driver code``a``=` `[ [ ``1``, ``3` `], [ ``4``, ``7` `], [ ``8``, ``11` `] ]``n ``=` `len``(a)``k ``=` `6``index ``=` `findNumber(a, n, k)``if` `(index !``=` `-``1``):``    ``print``(index)``else``:``    ``print``(``-``1``)`` ` `# This code is contributed by mohit kumar`

## C#

 `// C# implementation of the above approach``using` `System;``class` `GFG ``{``public` `class` `pair ``{ ``    ``public` `int` `first, second; ``    ``public` `pair(``int` `first, ``int` `second) ``    ``{ ``        ``this``.first = first; ``        ``this``.second = second; ``    ``} ``} `` ` `// Function to return the index of the range ``// in which K lies and uses binary search ``static` `int` `findNumber(pair []a, ``int` `n, ``int` `K) ``{ ``    ``int` `low = 0, high = n - 1; `` ` `    ``// Binary search ``    ``while` `(low <= high) ``    ``{ `` ` `        ``// Find the mid element ``        ``int` `mid = (low + high) >> 1; `` ` `        ``// If element is found ``        ``if` `(K >= a[mid].first && ``            ``K <= a[mid].second) ``            ``return` `mid; `` ` `        ``// Check in first half ``        ``else` `if` `(K < a[mid].first) ``            ``high = mid - 1; `` ` `        ``// Check in second half ``        ``else``            ``low = mid + 1; ``    ``} `` ` `    ``// Not found ``    ``return` `-1; ``} `` ` `// Driver code ``public` `static` `void` `Main(String[] args)``{``    ``pair []a = {``new` `pair(1, 3), ``                ``new` `pair(4, 7), ``                ``new` `pair(8, 11)}; ``    ``int` `n = a.Length; ``    ``int` `k = 6; ``    ``int` `index = findNumber(a, n, k); ``    ``if` `(index != -1) ``        ``Console.WriteLine(index);``    ``else``        ``Console.WriteLine(-1);``    ``}``}`` ` `// This code is contributed by Rajput-Ji`
Output:
```1
```

Time Complexity: O(log N)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up