Given an array A[] of size N and an integer X, the task is to check if X exists in A[] with no more than floor(N/2) + 2 comparisons.
Note: For any index i, (i < N) or (A[i] == X) are considered as separate comparisons.
Examples:
Input: A[] = {-3, 5, 11, 3, 100, 2, 88, 22, 7, 900, 23, 4, 1}, X = 88
Output: Yes 8
Explanation: X = 88 exists in the given array, A[] and is detected with 8 comparisons.Input: A[]= {-3, 5, 11, 3, 100, 2, 88, 22, 7, 900, 23, 4, 1}, X = 6
Output: No
Explanation: X = 6 doesn’t exist in the given array, A[].
Approach: Follow the steps to solve the problem:
- Initialize a variable, say T as 1, to store product of all array elements – X i.e (A[i] – X)
- Initialize a variable, say comparisons as 0, to store the number of comparisons required.
- Initialize pointer, i as 0 to traverse the array.
- If the value of N is odd, increment comparisons by 1 because parity of N is checked and update T to T * (A[0] – X) and i to 1.
- Therefore, the number of elements in the range [i, N – 1] i.e N – i is always even.
- Traverse the array, A[] in range [i, N-1] and perform the following steps:
- Update the value of T to T * (A[i] – X) * (A[i + 1] – X).
- Update i to i + 2 and increment comparisons by 1 because condition i < N is checked.
- If the value of T is 0, increment comparisons by 1 because the equality of T is compared. Therefore, X exists in A[] and print “Yes” and number of comparisons.
- Otherwise, Print “No” as the result.
- The algorithm guarantees that the number of comparisons ? floor(N / 2) + 2.
Below is the implementation of the above approach:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to check whether X // is present in the array A[] void findElement( int A[], int N, int X) { // Initialise a pointer int i = 0; // Store the number // of comparisons int Comparisons = 0; // Variable to store product int T = 1; string Found = "No" ; // Check is N is odd Comparisons++; if (N % 2 == 1) { // Update i and T i = 1; T *= (A[0] - X); } // Traverse the array for (; i < N; i += 2) { // Check if i < N Comparisons += 1; // Update T T *= (A[i] - X); T *= (A[i + 1] - X); } // Check if T is equal to 0 Comparisons += 1; if (T == 0) { cout << "Yes " << Comparisons; } else { cout << "No" ; } } // Driver Code int main() { // Given Input int A[] = { -3, 5, 11, 3, 100, 2, 88, 22, 7, 900, 23, 4, 1 }; int N = sizeof (A) / sizeof (A[0]); int X = 1; // Function Call findElement(A, N, X); return 0; } |
Java
// Java program for the above approach public class GFG { // Function to check whether X // is present in the array A[] static void findElement( int [] A, int N, int X) { // Initialise a pointer int i = 0 ; // Store the number // of comparisons int Comparisons = 0 ; // Variable to store product int T = 1 ; // Check is N is odd Comparisons++; if (N % 2 == 1 ) { // Update i and T i = 1 ; T *= (A[ 0 ] - X); } // Traverse the array for (; i < N; i += 2 ) { // Check if i < N Comparisons += 1 ; // Update T T *= (A[i] - X); T *= (A[i + 1 ] - X); } // Check if T is equal to 0 Comparisons += 1 ; if (T == 0 ) { System.out.println( "Yes " + Comparisons); } else { System.out.println( "No" ); } } // Driver code public static void main(String[] args) { // Given Input // Given Input int [] A = { - 3 , 5 , 11 , 3 , 100 , 2 , 88 , 22 , 7 , 900 , 23 , 4 , 1 }; int N = A.length; int X = 1 ; // Function Call findElement(A, N, X); } } // This code is contributed by abhinavjain194 |
Python3
# Python 3 program for the above approach # Function to check whether X # is present in the array A[] def findElement(A, N, X): # Initialise a pointer i = 0 # Store the number # of comparisons Comparisons = 0 # Variable to store product T = 1 Found = "No" # Check is N is odd Comparisons + = 1 if (N % 2 = = 1 ): # Update i and T i = 1 T * = (A[ 0 ] - X) # Traverse the array while (i< N): # Check if i < N Comparisons + = 1 # Update T T * = (A[i] - X) T * = (A[i + 1 ] - X) i + = 2 # Check if T is equal to 0 Comparisons + = 1 if (T = = 0 ): print ( "Yes" ,Comparisons) else : print ( "No" ) # Driver Code if __name__ = = '__main__' : # Given Input A = [ - 3 , 5 , 11 , 3 , 100 , 2 , 88 , 22 , 7 , 900 , 23 , 4 , 1 ] N = len (A) X = 1 # Function Call findElement(A, N, X) # This code is contributed by bgangwar59. |
C#
// C# program for the above approach using System; class GFG{ // Function to check whether X // is present in the array A[] static void findElement( int [] A, int N, int X) { // Initialise a pointer int i = 0; // Store the number // of comparisons int Comparisons = 0; // Variable to store product int T = 1; // Check is N is odd Comparisons++; if (N % 2 == 1) { // Update i and T i = 1; T *= (A[0] - X); } // Traverse the array for (; i < N; i += 2) { // Check if i < N Comparisons += 1; // Update T T *= (A[i] - X); T *= (A[i + 1] - X); } // Check if T is equal to 0 Comparions += 1; if (T == 0) { Console.Write( "Yes " + Comparisons); } else { Console.Write( "No" ); } } // Driver Code public static void Main() { // Given Input int [] A = { -3, 5, 11, 3, 100, 2, 88, 22, 7, 900, 23, 4, 1 }; int N = A.Length; int X = 1; // Function Call findElement(A, N, X); } } // This code is contributed by ukasp |
Javascript
<script> // JavaScript program for the above approach // Function to check whether X // is present in the array A[] function findElement(A, N, X) { // Initialise a pointer var i = 0; // Store the number // of comparisons var Comparisons = 0; // Variable to store product var T = 1; var Found = "No" ; // Check is N is odd Comparisons += 1; if (N % 2 == 1) { // Update i and T i = 1; T *= (A[0] - X); } // Traverse the array for (; i < N; i += 2) { // Check if i < N Comparisons += 1; // Update T T *= (A[i] - X); T *= (A[i + 1] - X); } // Check if T is equal to 0 Comparisons += 1; if (T == 0) { document.write( "Yes " + Comparisons); } else { document.write( "No" ); } } // Driver Code // Given Input var A = [-3, 5, 11, 3, 100, 2, 88, 22, 7, 900, 23, 4, 1]; var N = A.length; var X = 1; // Function Call findElement(A, N, X); </script> |
Yes 8
Time Complexity: O(N)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!