Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Search an element in given N ranges

  • Difficulty Level : Medium
  • Last Updated : 07 Jun, 2021

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:
6 lies in the range {4, 7} with index = 1
Input: arr[] = { { 1, 3 }, { 4, 7 }, { 9, 11 } }, K = 8 
Output: -1 
 

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.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

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 <bits/stdc++.h>
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[0]);
    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

Javascript




<script>
 
// JavaScript implementation of the approach
 
// Function to return the index of the range
// in which K lies and uses linear search
function findNumber(a, n, K)
{
    // Iterate and find the element
    for (var i = 0; i < n; i++) {
 
        // If K lies in the current range
        if (K >= a[i][0] && K <= a[i][1])
            return i;
    }
 
    // K doesn't lie in any of the given ranges
    return -1;
}
 
// Driver code
var a = [ [ 1, 3 ], [ 4, 7 ], [ 8, 11 ] ];
var n = a.length;
var k = 6;
var index = findNumber(a, n, k);
if (index != -1)
    document.write( index);
else
    document.write( -1);
 
 
</script>
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 <bits/stdc++.h>
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[0]);
    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

Javascript




<script>
 
// JavaScript implementation of the approach
 
     class pair {
     
        constructor(first , second) {
            this.first = first;
            this.second = second;
        }
    }
 
    // Function to return the index of the range
    // in which K lies and uses binary search
    function findNumber( a , n , K) {
        var low = 0, high = n - 1;
 
        // Binary search
        while (low <= high) {
 
            // Find the mid element
            var 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
     
        var a = [ new pair(1, 3), new pair(4, 7),
                  new pair(8, 11) ];
        var n = a.length;
        var k = 6;
        var index = findNumber(a, n, k);
        if (index != -1)
            document.write(index);
        else
            document.write(-1);
 
// This code contributed by gauravrajput1
 
</script>
Output: 
1

 

Time Complexity: O(log N)
 




My Personal Notes arrow_drop_up
Recommended Articles
Page :