Problem Statement
Given an array arr[] containing positive elements. A and B are two numbers defining a range. The task is to check if the array contains all elements in the given range.
Example 1:
Input: N = 7, A = 2, B = 5 arr[] = {1, 4, 5, 2, 7, 8, 3} Output: Yes Explanation: It has elements between range 2-5 i.e 2,3,4,5
Example 2:
Input: N = 7, A = 2, B = 6 arr[] = {1, 4, 5, 2, 7, 8, 3} Output: No Explanation: Array does not contain 6.
Your Task:
This is a function problem. You don’t need to take any input, as it is already accomplished by the driver code. You just need to complete the function check_elements() that takes array arr, integer N, integer A, and integer B as parameters and returns the boolean True if array elements contain all elements in the given range else boolean False.
Note: If the array contains all elements in the given range then driver code outputs Yes otherwise, it outputs No
Expected Time Complexity: O(N).
Expected Auxiliary Space: O(1).
Constraints:
1 ≤ N ≤ 107
Solution
bool check_elements(int arr[], int n, int A, int B) { if(n<=B-A) return false; for(int i=0; i<n; i++){ if(abs(arr[i])>=A && abs(arr[i])<=B){ int index = abs(arr[i])-A; if(arr[index]>0) arr[index]=arr[index]*-1; } } for(int i=0; i<=B-A; i++){ if(arr[i]>0) return false; } return true; }