Search an element in given N ranges

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 ranges 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 searchint 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 codeint 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 approachclass 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 searchstatic 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 codepublic 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 searchdef 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 codeif __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 approachusing 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 searchstatic 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 codepublic 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 searchfunction 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 codevar 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> |
1
Time Complexity: O(N), as we are using a loop to traverse N times to check if the number lies in the given range. Where N is the number of pairs in the array.
Auxiliary Space: O(1), as we are not using any extra space.
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 searchint 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 codeint 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 searchdef 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 codea= [ [ 1, 3 ], [ 4, 7 ], [ 8, 11 ] ]n = len(a)k = 6index = 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 approachusing 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> |
1
Time Complexity: O(log N), as we are using binary search, in each traversal we divide the array into two halves and choose one of them to search further in. So the effective time is 1+1/2+1/4+….+1/2^N which is equivalent to logN. Where N is the number of pairs in the array.
Auxiliary Space: O(1), as we are not using any extra space.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 zambiatek!



